我正在尝试使用RabbitMqBundle创建管道和过滤器(http://www.eaipatterns.com/PipesAndFilters.html)。最终设置应如下所示:
[main_topic_exchange]
|---BK=S1.K1---> consumer1.1 ---BK=S2.K1---> consumer2.1---> ...
|---BK=S1.K2---> consumer1.2 ---BK=S2.K2---> consumer2.2---> ...
...............
|---BK=S1.Kn---> consumer1.n ---BK=S2.Kn---> consumer2.n---> ...
基本上我需要能够配置管道"蓝图"并根据需要启动尽可能多的管道实例(用于可伸缩性)。
我的解决方案:
使用现有捆绑包并在回调中直接指示生产者和路由键,以指示下一阶段 - 不太灵活,以硬编码
扩展rabbitmqbundle并创建具有路由密钥setter方法的使用者并从命令行传递它:
./app/console rabbitmq:pipe1_consumer1 --route=S1.K1 --next=S2.K1
./app/console rabbitmq:pipe1_consumer2 --route=S2.K1 --next=S3.K1
./app/console rabbitmq:pipe1_consumer2 --route=S2.K1 --next=S3.K1
- 接下来将指示到下一个计算阶段(消费者)的路由密钥。
我不确定什么是最优雅的解决方案,任何想法?
感谢。
答案 0 :(得分:1)
RabbitMQBundle作者在这里。该捆绑包的最初目标是实现多种消息传递模式。考虑到管道和过滤器只是另一种模式,最好的方法是实现它并将其添加到库中。我会欢迎这样的补充。