私はgrails 3.2.3
バージョンとrabbitmq native plugin 3.3.2
(http://budjb.github.io/grails-rabbitmq-native/doc/manual/)を使用しています。私は次のシナリオを達成しようとしています。
説明:は、私は、ヘッダーと単一のキューに複数のメッセージを送信することだし、消費者のセクションでは、私は特定のフィルタリングによってメッセージを消費する結合適用しようとしました。しかし、消費者はフィルタリングに関係なくすべてのメッセージを消費します。つまり、バインディングが機能していないことを意味します。また、私はrabbitmqの初心者です。だから、どんな助けや方向性も高く評価されています。以下は私のコードです。 application.groovyでGrails rabbitmqネイティブメッセージをコンシューマに送信
キューの設定:関数をキューに送信
rabbitmq {
queues = [
[
name : "mail.queue",
connection: "defaultConnection",
durable : true
]
]
}
: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
}
}
}
を私は第3のパラメータはオプション製場合によっては複数のタイプの消費者を必要としません。
キューに送るコール:
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)
}