我想以下情形使用AMQP保持通過<code>amqp</code>一個長期連接到遠程工作者
服務器調度「開始」行動工作進程模型,具體如下(假設channel
及action
是以前提供和行動爲START
一些有效載荷。)
channel.assertQueue('', { exclusive: true }).then(({ queue }) => {
const cId = uuid()
channel.consume(queue, (msg) => {
if (msg.properties.correlationId === cId) {
const response = JSON.parse(msg.content.toString())
console.log('response', response)
resolve(response)
}
}, { noAck: true })
const msg = JSON.stringify(action)
channel.sendToQueue(
QUEUE_NAME,
new Buffer(msg),
{ correlationId: cId, replyTo: queue }
)
}, reject)
工人得到START action
與correlationId
和replyTo
隊列名稱一起,增加了有效載荷的事情要做自己的內部列表,並響應到「0123_S」隊列並執行「START_SUCCESS」操作。
現在,工作人員將通過其內部要做的事情列表並執行它們,並通過相同的replyTo
隊列向服務器發出「更新」操作,因此服務器需要知道要繼續收聽到該隊列進行更新,並且需要知道哪個工作人員正在處理任何特定任務的更新。服務器足夠聰明,可以知道某個特定任務已經啓動,因此在這種情況下不會重新分派。
但是,當它的時間爲工人停止做任務,需要服務器知道要發送一個「STOP」消息給工人。有沒有辦法讓工作人員向服務器發送某種直接的amqp通道給服務器,以便服務器可以使用它發送STOP消息?
非常感謝。這是一個很棒的答案。 –