2013-03-28 57 views
1

我正在使用RabbitMQ來處理大量數據。我有三種類型的消費者:downloader, extracterimporter。他們必須按照我上面提到的順序依次工作,例如, downloader會下載一堆文件,傳遞給extracter,解壓後importer應該將文件中的信息導入到數據庫中。我的問題是我如何實現這種功能?這是一個很好的方法將信息從downloaderconsumer)放入extracter的隊列中嗎?或者有另一個解決方案呢?如何使用RabbitMQ管理消費者的連續工作?

回答

1

這似乎是一個很好的情況下使用三個單獨的隊列。您將有一個download隊列,一個extraction隊列和一個import隊列。

每個隊列的使用者將負責在完成工作後在管道中的下一個隊列上放置消息。

因此,工作流程是這樣的(用queue.前綴隊列,使他們明顯):

??? -> queue.download 
queue.download -> downloader -> download complete -> queue.extraction 
queue.extraction -> extracter -> extraction complete -> queue.import 
queue.import -> importer -> import complete -> ??? 

幾件事情需要注意:

  • 你需要的東西將消息進入download隊列,以解決問題。
  • 您可以輕鬆地在管道中添加其他步驟 - 想要添加compression步驟(例如)?讓下載者將消息放入compression隊列中,然後一旦該步驟完成,在extraction隊列中輸入消息。
  • 您可以輕鬆地在管道的任何階段進行水平縮放。下載需要很長時間?啓動更多的downloader實例,將消息從相同的工作隊列中取出。

希望這有助於!

+0

甜甜圈,我已經開始按照你上面提到的方式實現功能。感謝您提供更多信息和幫助! – 2013-03-29 20:05:13