Je commence tout juste à utiliser RabbitMQ et AMQP en général.
- J'ai une file de messages
- J'ai plusieurs consommateurs, ce que j'aimerais faire différemment avec le même message .
La plupart de la documentation de RabbitMQ semble se concentrer sur le round-robin, c'est-à-dire où un seul message est consommé par un seul consommateur, la charge étant répartie entre chaque consommateur. C'est en effet le comportement dont je suis témoin.
Un exemple: le producteur a une seule file d'attente et envoie des messages toutes les 2 s:
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 lance le consommateur deux fois, je peux voir que chaque consommateur consomme des messages alternatifs dans un comportement circulaire. Par exemple, je vais voir les messages 1, 3, 5 dans un terminal, 2, 4, 6 dans l'autre .
Ma question est:
Puis-je faire en sorte que chaque consommateur reçoive les mêmes messages? Ie, les deux consommateurs reçoivent le message 1, 2, 3, 4, 5, 6? Comment cela s'appelle-t-il dans AMQP / RabbitMQ parler? Comment est-il normalement configuré?
Cela se fait-il couramment? Dois-je simplement demander à l'échange de router le message dans deux files d'attente distinctes, avec un seul consommateur?