我想以下情形使用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消息?
非常感谢。这是一个很棒的答案。 –