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排除錯誤)並且通常失敗 - 參數應該是相同的。 –