【发布时间】:2017-02-17 05:06:51
【问题描述】:
首先,我知道已经有一个类似问题here的答案,但我仍然不确定这是因为RabbitMQ的不可能还是因为我没有足够的研究。
我来自 JS/Node 背景,事件 pub/sub 模式的工作原理是这样的:当许多消费者使用 pub/sub 模式订阅同一个主题时,每当某个生产者发布消息时,他们都应该得到相同的消息。
我希望通过消息代理实现相同的模式。
例如:
消费者1收听'request.user.#'
消费者2收听'request.user.#'
消费者3收听'request.#.#'
生产者 1 发布到主题 'request.user.add'
Producer 2 发布到主题'request.user.detail'
RabbitMQ 实际做了什么(根据RabbitMQ example about Topics)
Consumer 3 获取两条消息,而Consumer 1 或Consumer 2 获取第一条消息,并且只有它们中的任何一个获取第二条消息。
我期望实现的内容
其中三个同时收到消息。
您是否有任何想法通过消息代理(RabbitMQ 处于最高优先级)来实现这一点?请指出我是否遗漏了什么或在我的问题中不清楚的地方。
提前致谢。
使用解决方案编辑:
感谢@cantSleepNow,这是我在他的提示后想出的Consumer 1 和Consumer 2 的代码(NodeJS):
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', (err, conn) => {
conn.createChannel((err, ch) => {
var ex = 'topic_exchange'; // Exchange name
ch.assertExchange(ex, 'topic'); // Exchange with 'topic' type
ch.assertQueue('', {exclusive: true}, (err, q) => {
ch.bindQueue(q.queue, ex, 'request.user.#'); // Topic pattern
ch.consume(q.queue, (msg) => {
// Process message
});
});
});
});
【问题讨论】:
-
RabbitMQ 是您“解决方案”的必要组成部分吗?因为这是 Mosquitto 的面包和黄油
-
@JaromandaX 我愿意接受所有建议并试一试,我只是对 RabbitMQ 更感兴趣。
标签: javascript node.js rabbitmq