RabbitMQ如何将作业拆分为任务并处理结果

时间:2017-06-09 18:51:21

标签: java spring rabbitmq spring-rabbitmq

我在基于Spring的Web应用程序上有以下用例:

  • 我需要通过以下方式应用Competing Consumers EIP:队列中的消息实际上是属于同一作业的拆分任务。因此,我需要正确地跟踪作业的所有任务何时完成以及它们的完成状态,以便将场景保存为COMPLETED或FAILED,记录结果并通过例如通知。相应地通过电子邮件发送用户

所以,鉴于我上面描述的要求,我的问题是:

  1. 这可以用RabbitMQ完成,如果是的话怎么办?

2 个答案:

答案 0 :(得分:3)

我创建了一个快速gist来展示一个如何做到这一点的非常粗略的例子。在这个例子中,有一个生产者和两个消费者,两个队列,一个用于由生产者发送(" SEND"),由消费者消费,反之亦然,消费者发布到" RECV& #34;队列并由生产者消费。

现在请记住,这是一个相当粗略的例子,因为在这种情况下,生产者只发送一个作业(0到5之间的任意数量的任务),并阻止直到作业完成。避免这种情况的一种方法是在Map中存储一个作业ID和任务数,并且每次检查每个作业id报告的任务数量。

答案 1 :(得分:1)

您要做的事情超出了RabbitMQ的范围。 RabbitMQ用于发送和接收能够对其进行排队的消息。 它无法为您跟踪您的工作任务。

您需要拥有“工作存储”服务。每当您的客户完成任务时,它都会更新作业存储服务,将任务标记为已完成。作业存储服务知道作业中有多少任务,并且在上一个任务完成时,完成作业成功。在此服务中,您还将实现所有其他业务逻辑,例如何时将作业视为失败。