2016-12-20 1 views
2

나는 grails 3.2.3 버전과 rabbitmq native plugin 3.3.2 (http://budjb.github.io/grails-rabbitmq-native/doc/manual/)을 사용하고 있습니다. 다음 시나리오를 달성하려고합니다. enter image description here
설명 : 나는 헤더가 하나의 큐에 여러 메시지를 전송하고있어 소비자 섹션에 나는 특정 필터링을 통해 메시지를 소비하는 바인딩을 적용하기 위해 노력했다. 그러나 소비자는 필터링과 상관없이 모든 메시지를 소비합니다. 바인딩이 작동하지 않는다는 것을 의미합니다. 또한 나는 rabbitmq에 초보입니다. 그래서 어떤 도움/방향을 많이 주시면 감사하겠습니다. 아래는 제 코드입니다.Grails rabbitmq 기본 필터 메시지 소비자에게

큐 application.groovy의 구성 : sendToQueue 여기

protected void sendToQueue(QueueType queueType, Map message, Map<String, String> binding = null) { 
    rabbitMessagePublisher.send { 
     routingKey = queueType.queueName 
     body = message 
     autoConvert = true 
     if (headers != null) { 
      headers = binding 
     } 
    } 
} 

내가 I로 선택적 세번째 파라미터했다 :

rabbitmq { 
    queues = [ 
     [ 
       name  : "mail.queue", 
       connection: "defaultConnection", 
       durable : true 
     ] 
] 

}

함수를 큐에 보내기 어떤 경우에는 여러 유형의 소비자가 필요하지 않습니다. 큐에 보내 호출

:

sendToQueue(QueueType.EMAIL_QUEUE, [user: user], ["emailType": EmailType.PASSWORD_RESET.name()]) 
sendToQueue(QueueType.EMAIL_QUEUE, [user: user], ["emailType": EmailType.PASSWORD_RESET_SUCCESS.name()]) 

소비자에게 1 :

static rabbitConfig = [ 
     queue : QueueType.EMAIL_QUEUE.queueName, 
     binding : ["emailType": EmailType.PASSWORD_RESET.name()], 
     match : "all", 
     consumer: 10 
] 

def handleMessage(Map message, MessageContext context) { 
    print("From PasswordResetEmailConsumer consumer") 
    println(message) 
    passwordResetEmailService.sendPasswordResetMail(message) 
} 

소비자 2 : R 후

static rabbitConfig = [ 
     queue : QueueType.EMAIL_QUEUE.queueName, 
     binding : ["emailType": EmailType.PASSWORD_RESET_SUCCESS.name()], 
     match : "all", 
     consumer: 10 
] 

def handleMessage(Map message, MessageContext context) { 
    print("From PasswordResetSuccessEmailConsumer consumer") 
    println(message) 
    passwordResetSuccessEmailService.sendPasswordResetSuccessMail(message) 
} 

답변