【发布时间】:2013-01-13 17:05:10
【问题描述】:
这是我目前的设置。
- REST API 将 (POST) 数据推送到队列中
- 队列有一个始终在运行的消费者并生产到 en Exchange
- Exchange 路由到其他几个队列(比如 20+)
- (20 多个)队列中的每一个都执行特定的任务(消费者也始终运行)
- Cron 作业运行以检查所有 (20+) 任务是否已完成并生成到另一个队列
我不确定我是否喜欢 Consumers 一直运行,因为每个 Consumers 使用大约 300MB 的 Ram(我认为它是 MB,目前不在我面前)并且我正在寻找另一种实现方式。
M <-- Message coming from REST API
|
|
+-First Queue
|
|
| <-- The Exchange
/|\
/ | \
/ | \ <-- bind to multiple queues ( 20+ )
Q1 Q2 Q3 <-- Each Queue is a task that must be completed
| <-- CRON runs to check if all queues above have completed
|
|
Q4 <-- Queues 1,2 and 3 must finish first before Queue 4 can start
|
C <-- Consumer
我在下面的相关问题中建议使用 RPC,但这个问题是 RPC(据我了解)将有多个实例。这是一个资源密集型过程,我认为通过添加 RPC 调用它只会让服务器陷入困境,然后变得无响应(如果我错了,请纠正我)。
另一种方法是使用聚合器模式
这看起来正是我需要的,但我发现文档有限。有人做过这种模式吗?
我的问题是我对它目前的实施方式不满意,我正在寻找改进流程的方法。我希望摆脱 CRON,实施新模式,而不是让消费者一直运行。
该流程目前也只支持每个消费者的单个实例。它可以有多个消费者,但我们如何实现它,我们当时只想要一个。
这是在 PHP、Symfony2 框架中使用 RabbitMQBundle 实现的
相关问题:
【问题讨论】:
-
如果您投票结束,请给我一些改进问题的建议
-
我没有投票结束,因为当涉及到像这样显然很有趣且经过深思熟虑的问题时,我对整个“不具建设性”的事情感到矛盾,但是这个问题真的很开放。 “寻找改进流程的方法”类似于邀请对该主题的讨论,而不是“一个可验证的最佳答案”。就像常见问题解答中所说的那样,“如果你可以想象一本书可以回答你的问题,那你就问得太多了。”我当然可以想象出一本关于这个主题的书。
-
我同意,这里似乎缺乏直接的问题。
标签: php design-patterns rabbitmq message-queue amqp