2012-02-07 71 views
3

我试图找出如何最好地设置以下情形:工作依赖于RabbitMQ的

  1. 多A型作业添加到队列
  2. 当所有A型作业完成,一B或C类的工作将需要
  3. 当所有A,B和C型作业完成,最终的d型工作将需要

所以基本上(每个A型作业中的一)我们对队列中的作业有一定的依赖关系,这样我们就不会wa了nt开始运行需要完成其他工作的作业。有没有建立这样一个系统的指导方针? A型作业是否应该在工作完成后添加B或C型作业?是否应该把所有的工作都加在一起,并以某种方式告诉工人们在他们准备好之前不要拉他们?

如果我必须手动管理这种依赖关系,这两种方法都有优点和缺点,但我很好奇,如果我可以使用不同的模式,那么可以用更简单的方法完成同样的事情。

回答

3

我想知道routing slip模式是否可以激发你在这里,即发送原始A消息一个“滑”,它定义了下一个消息(B,C)应该是什么(应用什么规则来弄清楚在运行时)。

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

对于最后的D作业,我会让B/C处理步骤发送“D-ready”请求消息。当所有准备就绪的消息都将被收集(基于相关ID /组大小),我将触发最终的D作业。

+0

你会如何推荐监测类似这样的事情,假设A的工作量大概是3000(因此3000 B和C),只有一个D?标准桌子? – methodin 2012-02-08 00:47:16

+0

对于全局统计信息,可以为每种消息类型使用不同的队列并使用队列统计信息。但了解每项工作的状态可能需要外部数据存储。 – 2012-02-08 01:28:51