0
我有许多可以执行某些操作的机器。要发起一个动作,我想发送一条消息到一个由机器ID命名的队列,例如“12345”。使用AMQP/RabbitMQ将消息发送到独占队列
为了避免其他人使用这些消息,我认为队列应该是排他性的。
但是从我的控制器来看,如果队列在使用它的机器上声明为独占队列,我就无法声明这个队列。但是,我可以通过指定其名称来发送队列,但没有断言,但我认为这是不好的做法?
该机监听命令是这样的:
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()))
什么是最优雅的方式来解决这个问题?
您能否发布错误信息? –
405)RESOURCE_LOCKED - 无法获得锁定队列的独占访问权 –
独占队列意味着您不能拥有多个使用者。如果您知道队列应该始终由消费者创建,那么每次发送消息时都不需要创建队列(最好在开始时创建队列)。一个可能的问题是队列被定义了不同的参数'{exclusive:true,durable:false}'和'{}'(默认情况下,exclusive排除错误)并且通常失败 - 参数应该是相同的。 –