Ich fange gerade an, RabbitMQ und AMQP im Allgemeinen zu verwenden.
- Ich habe eine Warteschlange mit Nachrichten
- Ich habe mehrere Verbraucher, die ich mit derselben Nachricht verschiedene Dinge tun möchte .
Der größte Teil der RabbitMQ-Dokumentation scheint sich auf Round-Robin zu konzentrieren, dh wenn eine einzelne Nachricht von einem einzelnen Verbraucher konsumiert wird, wobei die Last auf jeden Verbraucher verteilt wird. Dies ist in der Tat das Verhalten, das ich sehe.
Ein Beispiel: Der Produzent hat eine einzelne Warteschlange und sendet alle 2 Sekunden Nachrichten:
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)
})
Und hier ist ein Verbraucher:
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)
})
})
})
Wenn ich den Konsumenten zweimal starte, kann ich sehen, dass jeder Konsument alternative Nachrichten im Round-Robin-Verhalten konsumiert. ZB sehe ich die Nachrichten 1, 3, 5 in einem Terminal, 2, 4, 6 im anderen .
Meine Frage ist:
Kann ich jeden Verbraucher die gleichen Nachrichten empfangen lassen? Dh beide Verbraucher erhalten Nachricht 1, 2, 3, 4, 5, 6? Wie heißt das in AMQP / RabbitMQ? Wie ist es normalerweise konfiguriert?
Wird das allgemein gemacht? Sollte ich die Nachricht stattdessen nur durch den Austausch in zwei separate Warteschlangen mit einem einzigen Verbraucher weiterleiten lassen?