RabbitMQ 中的作业依赖

met*_*din 5 dependencies rabbitmq

我试图弄清楚如何最好地设置以下场景:

  1. 多个A类作业加入队列
  2. 当所有 A 类工作完成后,将需要一个 B 或 C 类工作(每个 A 类工作一个)
  3. 完成所有 A、B 和 C 类作业后,将需要最终的 D 类作业

所以基本上我们对队列中的作业有一些依赖性,这样我们就不想开始运行需要完成其他作业的作业。是否有建立这样一个系统的指导方针?A类工作完成后应该添加B类工作还是C类工作?是否应该预先添加所有工作,并以某种方式告诉工人在准备好之前不要拉动它们?

如果我必须手动管理这种依赖关系,这两种方法都有利有弊,但我很好奇是否有一种不同的模式可以代替,它可能会以更简单的方式完成相同的事情。

Dav*_*sot 5

我想知道路由滑动模式是否可以在这里激发您的灵感,即在原始 A 消息中发送一个“滑动”,它定义了下一条消息(B,C)应该是什么(在运行时应用什么规则来弄清楚) .

我还会在单据中添加唯一的关联 ID 和关联组大小(在这种情况下:A 消息的总数)。

对于最终的 D 作业,我会让 B/C 流程步骤发送“D-ready”请求消息。当所有 D-ready 消息都收集完毕后(基于关联 ID/组大小),我将触发最终的 D 作业。