RabbitMQ/AMQP: одна очередь, несколько потребителей для одного и того же сообщения?

Я только начинаю использовать RabbitMQ и AMQP в целом.

  • У меня есть очередь сообщений
  • У меня есть несколько потребителей, которым я хотел бы делать разные вещи с одним и тем же сообщением.

Большая часть документации RabbitMQ, по-видимому, сосредоточена на циклическом переборе, т. е. когда одно сообщение потребляется одним потребителем, при этом нагрузка распределяется между каждым потребителем.Это действительно поведение, которое я наблюдаю.

Пример: производитель имеет одну очередь и отправляет сообщения каждые 2 секунды:

var amqp = require('amqp');
var connection = amqp.createConnection({ host: "localhost", port: 5672 });
var count = 1;

connection.on('ready', function () {
  var sendMessage = function(connection, queue_name, payload) {
    var encoded_payload = JSON.stringify(payload);  
    connection.publish(queue_name, encoded_payload);
  }

  setInterval( function() {    
    var test_message = 'TEST '+count
    sendMessage(connection, "my_queue_name", test_message)  
    count += 1;
  }, 2000) 


})

А вот потребитель:

var amqp = require('amqp');
var connection = amqp.createConnection({ host: "localhost", port: 5672 });
connection.on('ready', function () {
  connection.queue("my_queue_name", function(queue){
    queue.bind('#'); 
    queue.subscribe(function (message) {
      var encoded_payload = unescape(message.data)
      var payload = JSON.parse(encoded_payload)
      console.log('Recieved a message:')
      console.log(payload)
    })
  })
})

Если я запускаю потребитель дважды, я вижу, что каждый потребитель потребляет альтернативные сообщения в циклическом режиме. Например, я увижу сообщения 1, 3, 5 в одном терминале, 2, 4, 6 в другом .

У меня вопрос:

  • Могу ли я сделать так, чтобы каждый потребитель получал одинаковые сообщения? Т.е. оба потребителя получают сообщения 1, 2, 3, 4, 5, 6? Как это называется на языке AMQP/RabbitMQ? Как он обычно настраивается?

  • Это обычно делается? Должен ли я вместо этого просто направить сообщение в две отдельные очереди с одним потребителем?

125
задан mikemaccana 16 May 2012 в 14:56
поделиться