我有很多可以做某些动作的机器。要启动操作,我想将消息发送到由机器ID命名的队列," 12345"例如。
为了避免其他人使用这些消息,我认为队列应该是独占的。
但是从我的控制器中,如果它在消耗它的机器上被声明为独占,我就无法断言队列。但是,我可以通过指定其名称来发送到队列,而不是断言,但我想这是不好的做法?
机器正在侦听这样的命令:
ch.assertQueue(machineID, {exclusive: true, durable: false}, function (err, q) {
if (err) console.log(err)
console.log("opened queue")
ch.consume(q.queue, function (message) {
console.log(message.content.toString())
})
})
当我发送到队列时,由于独占问题,它将在客户端的这一行中失败:
ch.assertQueue(machineID, {})
但如果我评论上面的一行,它会发送消息。
ch.sendToQueue(machineID, new Buffer(id.toString()))
最优雅的解决方法是什么?
答案 0 :(得分:1)
一种方法是创建类型' direct'并将您的队列绑定到此交换。因此,如果您将任何消息传递给此交换,则它将仅路由到该队列,该队列的名称与传递给交换的路由密钥相同。例如,所有带路由密钥的消息为' 12345'将被路由到名为' 12345'通过这样的交流。