如何使用RabbitMQ管理消费者的顺序工作?

时间:2013-03-28 07:19:35

标签: rabbitmq

我正在使用RabbitMQ来处理大量数据。我有三种类型的消费者:downloader, extracterimporter。它们必须按照我上面提到的顺序顺序工作,例如downloader将下载一堆文件,传递给extracter,在提取它们之后,importer应该将文件中的信息导入到DB中。我的问题是如何实现这种功能?这是将邮件从extracterdownloader)放入consumer队列的好方法吗?或者还有另一个解决方案吗?

1 个答案:

答案 0 :(得分: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实例,将消息从相同的工作队列中拉出来。

希望这有帮助!