1

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

4

1 回答 1

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从同一工作队列中提取消息的实例。

希望这可以帮助!

于 2013-03-29T12:34:21.680 回答