这里有一点关于我目前的设置。
- REST API 将 (POST) 数据推送到队列中
- 队列有一个始终在运行的消费者,并生产到 en Exchange
- Exchange 路由到其他几个队列(如 20+)
- 每个(20+)队列都执行一项特定任务(消费者也总是运行)
- Cron 作业运行以检查所有 (20+) 任务是否已完成并生成到另一个队列
我不确定我是否喜欢消费者一直运行,因为每个消费者使用大约 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,实施新模式,而不是让消费者一直运行。
该流程目前也只支持每个消费者的单个实例。它可以有多个消费者,但我们如何实现它,我们当时只想要一个。
这是使用 RabbitMQBundle 在 PHP、Symfony2 框架中实现的
相关问题: