Ho appena iniziato a utilizzare RabbitMQ e AMQP in generale.
- Ho una coda di messaggi
- Ho più consumatori, che vorrei fare cose diverse con lo stesso messaggio .
La maggior parte della documentazione RabbitMQ sembra focalizzata sul round-robin, ovvero dove un singolo messaggio viene consumato da un singolo consumatore, con il carico che viene distribuito tra ciascun consumatore. Questo è davvero il comportamento a cui assisto.
Un esempio: il produttore ha una singola coda e invia messaggi ogni 2 secondi:
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)
})
Ed ecco un consumatore:
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)
})
})
})
Se avvio due volte il consumatore, vedo che ogni consumatore consuma messaggi alternativi nel comportamento round robin. Ad esempio, vedrò i messaggi 1, 3, 5 in un terminale, 2, 4, 6 nell'altro .
La mia domanda è:
Posso fare in modo che ciascun consumatore riceva gli stessi messaggi? Vale a dire, entrambi i consumatori ricevono il messaggio 1, 2, 3, 4, 5, 6? Come si chiama AMQP / RabbitMQ? Come viene normalmente configurato?
Questo è fatto comunemente? Devo solo fare in modo che lo scambio instradi il messaggio in due code separate, con un solo consumatore, invece?