我可以让每个消费者收到相同的消息吗? 即,两个消费者都收到消息1、2、3、4、5、6?AMQP / RabbitMQ所说的是什么?通常如何配置?
不,如果使用者在同一队列中,则不会。从RabbitMQ的AMQP概念指南中:
重要的是要了解,在AMQP 0-9-1中,消息在使用者之间是负载平衡的。
这似乎暗示 队列中的循环行为是给定的 ,并且不可配置。即,需要单独的队列才能使多个使用者处理相同的消息ID。
通常这样做吗? 我是否应该让交换将消息路由到两个单独的队列中,并由一个使用者使用?
不,不是这样,单个队列/多个使用者,每个使用者处理相同的消息ID是不可能的。让交换将消息路由到两个单独的队列中确实更好。
由于我不需要太复杂的路由,因此 扇出交换机 可以很好地解决这一问题。由于node-
amqp具有“默认交换”的概念,允许您直接将消息发布到连接中,因此我没有过多关注Exchange,但是大多数AMQP消息都发布到了特定的交换中。
这是我的扇出交换,包括发送和接收:
var amqp = require('amqp');var connection = amqp.createConnection({ host: "localhost", port: 5672 });var count = 1;connection.on('ready', function () { connection.exchange("my_exchange", options={type:'fanout'}, function(exchange) { var sendMessage = function(exchange, payload) { console.log('about to publish') var enpred_payload = JSON.stringify(payload); exchange.publish('', enpred_payload, {}) } // Recieve messages connection.queue("my_queue_name", function(queue){ console.log('Created queue') queue.bind(exchange, ''); queue.subscribe(function (message) { console.log('subscribed to queue') var enpred_payload = unescape(message.data) var payload = JSON.parse(enpred_payload) console.log('Recieved a message:') console.log(payload) }) }) setInterval( function() { var test_message = 'TEST '+count sendMessage(exchange, test_message) count += 1; }, 2000) })})


