Właśnie zaczynam ogólnie używać RabbitMQ i AMQP.
- Mam kolejkę wiadomości
- Mam wielu konsumentów, którym chciałbym robić różne rzeczy z tym samym przesłaniem .
Wydaje się, że większość dokumentacji RabbitMQ koncentruje się na zasadzie działania okrężnego, tj. Gdy pojedyncza wiadomość jest konsumowana przez jednego konsumenta, a obciążenie rozkłada się na każdego konsumenta. To jest rzeczywiście zachowanie, którego jestem świadkiem.
Przykład: producent ma jedną kolejkę i wysyła komunikaty co 2 sekundy:
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)
})
A oto konsument:
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)
})
})
})
Jeśli dwukrotnie uruchomię konsumenta, widzę, że każdy konsument konsumuje alternatywne komunikaty w trybie okrężnym. Np. Zobaczę wiadomości 1, 3, 5 w jednym terminalu, 2, 4, 6 w drugim .
Moje pytanie brzmi:
Czy każdy konsument może otrzymać te same wiadomości? To znaczy, obaj konsumenci otrzymują wiadomość 1, 2, 3, 4, 5, 6? Jak to się nazywa w języku AMQP / RabbitMQ? Jak to jest normalnie skonfigurowane?
Czy to się często robi? Czy zamiast tego powinienem po prostu skierować wiadomość do dwóch oddzielnych kolejek z jednym odbiorcą?