RabbitMQ中的作业依赖性

时间:2012-02-07 15:45:25

标签: dependencies rabbitmq

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

  1. 将多个A型作业添加到队列
  2. 完成所有A类作业后,将需要B型或C型作业(每个A型作业一个)
  3. 完成所有A,B和C类型的作业后,将需要最终的D型作业
  4. 所以基本上我们对队列中的作业有一些依赖关系,这样我们就不想开始运行需要完成其他作业的作业了。是否有建立这样一个系统的指南? A型工作在工作完成后是否应该添加B或C类型的工作?是否应该预先添加所有工作,并以某种方式告诉工人在他们准备好之前不要拉他们?

    如果我必须手动管理这种依赖关系,这两种方法都有利有弊,但我很好奇是否有一种不同的模式,我可以使用它来完成同样的事情但是更容易。

1 个答案:

答案 0 :(得分:3)

我想知道routing slip模式是否能激发你的灵感,即在原始的A消息中发送一个“滑动”,定义下一个消息(B,C)应该是什么(适用于哪些规则)在运行时计算出来。)

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

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