【发布时间】:2018-11-08 08:18:30
【问题描述】:
我有一组需要处理的作业。 有些可能需要 10 分钟,有些可能需要 1 小时。
现在我需要知道最后执行的作业是什么,因为在该组作业结束时我需要触发另一条消息。
本例中的消息队列是 RabbitMQ。
有没有办法只用 RabbitMQ 来完成这个?
什么是完成这项任务的好策略?
【问题讨论】:
我有一组需要处理的作业。 有些可能需要 10 分钟,有些可能需要 1 小时。
现在我需要知道最后执行的作业是什么,因为在该组作业结束时我需要触发另一条消息。
本例中的消息队列是 RabbitMQ。
有没有办法只用 RabbitMQ 来完成这个?
什么是完成这项任务的好策略?
【问题讨论】:
这是您可以在任何消息传递系统中使用的策略。
我假设您有一组工作人员正在监听单个队列,其中作业“作业队列”要处理。现在您可以拥有服务,让我们称之为 Manager 女巫复制此队列并保存所有未完成的消息。现在,当工作人员完成工作时,它会向经理发送确认消息。例如,Manager 会丢弃所有已完成的作业并存储仅运行一次。 (如果您想考虑可通过的故障,它也可以跟踪)。 当 Manager 没有更多消息时,它会将消息发布到“组完成主题中的所有消息”。现在发布者可以监听主题并将新的作业消息发送到“作业队列”。
当然,在简单的情况下,您可以同时拥有一名制片人,同时担任经理。
RabbitMQ 实现示例。
现在要在 RabbitMQ 中实现这一点,您可以例如创建一个 FanoutExchange(供生产者向其发送消息)和两个队列 jobsQueue(向工作人员发送作业)和 jobTrackingQueue(向管理器发送作业以跟踪作业)。现在您创建第二个 FonoutExchange(供经理将任务完成的消息发送到)您为每个想知道所有消息是否已完成的生产者创建未命名的队列。
【讨论】: