使用AMQP / RabbitMQ将消息发送到独占队列

时间:2017-10-15 23:41:05

标签: node.js rabbitmq amqp

我有很多可以做某些动作的机器。要启动操作,我想将消息发送到由机器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()))

最优雅的解决方法是什么?

1 个答案:

答案 0 :(得分:1)

一种方法是创建类型' direct'并将您的队列绑定到此交换。因此,如果您将任何消息传递给此交换,则它将仅路由到该队列,该队列的名称与传递给交换的路由密钥相同。例如,所有带路由密钥的消息为' 12345'将被路由到名为' 12345'通过这样的交流。