我使用 rabbitMq、nodeJs(带有 socet.io、amqp 模块)、ZF2 进行开发聊天
默认情况下,RabbitMq 在帮助循环中从队列发送消息。
RabbitMq 是否有机会向所有订阅者发送相同的消息?
例如:如果我为每个连接创建它的队列,那是正确的,但是如果用户在他的浏览器上打开 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'});