"Mirror" 同一节点上的rabbitmq队列

"Mirror" rabbitmq queue on the same node

我有一个 rabbitMQ 队列。

此队列的使用者是一个从队列中提取消息并将它们插入数据库(经过一些处理后)的应用程序。

我还希望能够将这些消息用于其他用途(将它们发送到另一个应用程序进行存储和其他不相关的处理)。

消费者应用程序是封闭源代码,因此我无法打开它并更改其行为。

我认为实现我的目标的最佳方式是镜像 rabbit 队列,并独立于(且不干扰)原始消息流使用它。

我查看了 RabbitMQ 镜像,但这似乎设计用于在 master/slave 配置中的两个或多个节点上运行。

我想我想要的是:

Pre-processor application >   rabbit_queue_1  > Normal DB consumer
                           \ 
                            > rabbit_queue_2 > New independent consumer.

我需要两个消费者获取所有相同的消息,所以我不希望两个应用程序从同一个队列中读取,或者让一个新的消费者从队列中读取然后再次放回队列中。

镜像是一种高可用性解决方案,不适合您的要求。

相反,考虑 RabbitMQ 拆分发布和消费功能。如果现有程序正在发布到 RabbitMQ,只需找出当前应用程序队列的路由键,并在声明您自己的队列时使用它。

发布的消息在匹配路由键时,将流向使用该键的所有队列。特殊情况包括 fanout/topic 交换,它们还允许在路由键中使用通配符。

使用直接交换,你的拓扑实际上是:

Pre-processor application >  Direct exchange    > rabbit_queue_1  > Normal DB consumer
                             (via routing key)  \ 
                                                > rabbit_queue_2 > New independent consumer.