開発チャットにはrabbitMq、nodeJs(socet.io、amqpモジュールを使用)、ZF2を使用しています
デフォルトでは、RabbitMq はヘルプ ラウンド ロビンでキューからメッセージを送信します。
すべてのサブスクライバー キューに同じメッセージを送信する RabbitMq の機会はありますか?
例:接続ごとにキューを作成すると、それは正しく機能しますが、ユーザーがブラウザで2つのタブを開くと、2つのキューが作成されます。良くないと思います。
ユーザーごとに1つのキューが必要です(それを行う場合、最初のメッセージが最初のタブに送信され、2番目のメッセージが2番目のタブに送信されます)
私のコード:
var exchange = connectionAmqp.exchange('chat', {type: 'direct', passive: false, durable:false, autoDelete: false});
console.log(' [*] Client connected')
connectionAmqp.queue('chat'+userId.toString(), {
passive : false,
durable : false,
exclusive : false,
autoDelete: false
}, function(queue) {
//Catch new message from queue
queue.bind(exchange, userId.toString());
queue.subscribe(function(msg){
socket.emit('pullMessage', msg); //Emit message to browser
})
});
他のスクリプトからメッセージをプッシュします
var exchange = connectionAmqp.exchange('chat', {type: 'direct', passive: false, durable:false, autoDelete: false});
var data= {chatId:70,msg:"Text",time:1375333200}
exchange.publish('1', data, {contentType: 'application/json'});