【发布时间】:2016-12-20 16:11:17
【问题描述】:
我正在使用grails 3.2.3 版本和rabbitmq native plugin 3.3.2 (http://budjb.github.io/grails-rabbitmq-native/doc/manual/)。我正在尝试实现以下场景。
描述:我将多条消息发送到带有标头的单个队列,在消费者部分,我尝试通过特定过滤应用绑定来消费消息。但是无论过滤如何,消费者都会消费所有消息 - 意味着绑定不起作用。我也是rabbitmq的初学者。因此,非常感谢任何帮助/指导。下面是我的代码。
application.groovy 中的队列配置:
rabbitmq {
queues = [
[
name : "mail.queue",
connection: "defaultConnection",
durable : true
]
]
}
发送到队列功能:
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
}
}
}
在sendToQueue 上,我将第三个参数设为可选,因为在某些情况下我不需要多种类型的消费者;
调用发送到队列:
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:
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)
}
【问题讨论】:
标签: grails groovy rabbitmq grails-plugin rabbitmq-exchange