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