私はRabbitMQとAMQPを一般的に使い始めたばかりです。
- メッセージのキューがあります
- 複数の消費者がいますが、同じメッセージでさまざまなことをしたいと思っています。
RabbitMQのドキュメントのほとんどは、ラウンドロビンに焦点を当てているようです。つまり、単一のメッセージが単一のコンシューマーによって消費され、各コンシューマー間で負荷が分散されます。これは確かに私が目撃した行動です。
例:プロデューサーには単一のキューがあり、2秒ごとにメッセージを送信します。
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)
})
そしてここに消費者がいます:
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)
})
})
})
コンシューマーを2回起動すると、各コンシューマーがラウンドロビン動作で代替メッセージを消費していることがわかります。たとえば、一方の端末にメッセージ1、3、5、もう一方の端末に2、4、6のメッセージが表示されます。
私の質問は:
各コンシューマーに同じメッセージを受信させることはできますか?つまり、両方の消費者がメッセージ1、2、3、4、5、6を受け取りますか?これはAMQP/RabbitMQで何と呼ばれていますか?通常はどのように構成されていますか?
これは一般的に行われますか?代わりに、交換でメッセージを2つの別々のキューにルーティングし、単一のコンシューマーを使用する必要がありますか?