2012-02-07 75 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