如何知道队列中的最后一个作业

时间:2018-05-29 15:50:42

标签: rabbitmq message-queue

我有一组需要处理的工作。 有些可能需要10分钟,有些可能需要1小时。

现在我需要知道执行的最后一个作业是什么,因为在该组作业结束时我需要发出另一条消息。

在这种情况下,消息队列是RabbitMQ。

有没有办法只用RabbitMQ来实现这个目标?

这项任务的好策略是什么?

1 个答案:

答案 0 :(得分:0)

这可以用于任何邮件系统。

我假设您有一组工作人员正在侦听要处理的作业“作业队列”的单个队列。现在你可以让服务让它调用它管理员女巫复制这个队列并保存所有没有完成的消息。现在,当工作人员完成工作时,它会向管理器发送确认消息。例如,Manager会丢弃所有已完成的作业和仅运行一次的存储。 (如果你想考虑可通过的故障,它也可以跟踪它)。 当Manager没有更多消息时,它将消息发布到“组完成主题中的所有消息”。现在,发布者可以收听该主题并将新的作业消息发送到“作业队列”。

当然,在简单的情况下,你可以让一个制作人同时担任经理。

RabbitMQ实施示例。

现在,要在RabbitMQ中实现此功能,您可以创建一个FanoutExchange(用于生产者发送消息)和两个队列jobsQueue(将作业发送给工作人员)和jobTrackingQueue(将作业发送到Manager以跟踪作业)。现在你创建第二个FonoutExchange(对于Manager来发送任务完成的消息)你为每个生产者创建一个未命名的队列,想知道是否所有的消息都已完成。