我使用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'});
答案 0 :(得分:0)
确保队列不是独占的。然后确保客户端连接到同一队列。这可以完成,但让客户端创建队列并指定该队列的名称。命名算法将确保每个客户端的队列名称是唯一的,但对于同一客户端,它将生成相同的名称。两个选项卡将依次从同一队列中读取,以确保您正在寻找的循环效果。
答案 1 :(得分:0)