【问题标题】:How to know the last job in a queue如何知道队列中的最后一个作业
【发布时间】:2018-11-08 08:18:30
【问题描述】:

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

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

本例中的消息队列是 RabbitMQ。

有没有办法只用 RabbitMQ 来完成这个?

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

【问题讨论】:

    标签: rabbitmq message-queue


    【解决方案1】:

    这是您可以在任何消息传递系统中使用的策略。

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

    当然,在简单的情况下,您可以同时拥有一名制片人,同时担任经理。

    RabbitMQ 实现示例。

    现在要在 RabbitMQ 中实现这一点,您可以例如创建一个 FanoutExchange(供生产者向其发送消息)和两个队列 jobsQueue(向工作人员发送作业)和 jobTrackingQueue(向管理器发送作业以跟踪作业)。现在您创建第二个 FonoutExchange(供经理将任务完成的消息发送到)您为每个想知道所有消息是否已完成的生产者创建未命名的队列。

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2015-06-13
      相关资源
      最近更新 更多