RabbitMQ / AMQP: seule file d'attente, plusieurs consommateurs pour le même message?

Je commence tout juste à utiliser RabbitMQ et AMQP en général.

  • J'ai une file d'attente de messages
  • J'ai plusieurs consommateurs, qui je voudrais faire des choses différentes avec la même message.

La plupart des RabbitMQ documentation semble focalisée sur les round-robin", c'est à dire où un seul message est consommé par un consommateur unique, avec la charge étant réparti entre chaque consommateur. C'est en effet le comportement je suis témoin.

Un exemple: le producteur a une seule file d'attente et envoyer des messages à toutes les 2 sec:

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) 


})

Et voici un consommateur:

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)
    })
  })
})

Si je commence le consommateur à deux reprises, je peux voir que chaque consommateur est de consommer des messages alternatifs en round-robin comportement. Par exemple, je vais voir les messages 1, 3, 5 dans un terminal, 2, 4, 6 dans l'autre.

Ma question est:

  • Puis-je avoir chaque consommateur de recevoir les mêmes messages? C'est à dire, à la fois les consommateurs à avoir de message 1, 2, 3, 4, 5, 6? Qu'est-ce qui est appelé dans AMQP/RabbitMQ parler? Comment est-il configuré?

  • Est de ce fait souvent? Dois-je juste l'échange de router le message en deux files d'attente, avec un seul consommateur, à la place?

  • Je ne suis pas RabbitMQ expert. Cependant, ce que vous avez maintenant est appelé file d'attente, mais ce que vous voulez, c'est des sujets, voir ce tutoriel: rabbitmq.com/tutorials/tutorial-five-python.html, de plus en plus sur les files d'attente vs sujets: msdn.microsoft.com/en-us/library/windowsazure/hh367516.aspx
  • Je crois qu'il veut sortance en fait si les sujets de travail aussi bien et va donner plus de contrôle, plus tard.
  • Merci @UrbanEsc. Sujets semble résoudre le problème en ayant un message frapper plusieurs files d'attente, et donc être consommée par chacun des files d'attente des consommateurs. Qui penche de plus en plus loin vers la file d'attente de plusieurs/consommateur scénario pour mon cas particulier.
  • Pour 2018 (et même pour 2016 et au plus tôt), la réponse est d'utiliser quelque chose comme Kafka, de l'OMI.
InformationsquelleAutor mikemaccana | 2012-05-16