2016-03-07 41 views
1

我有一個rabbitMQ隊列。「鏡像」在同一節點上的rabbitmq隊列

該隊列的使用者是一個將消息從隊列中拉出並將其插入數據庫(經過一些處理後)的應用程序。我想也可以使用這些消息的其他東西(將它們發送到另一個應用程序的存儲和其他無關的處理)。

消費者應用程序是封閉源代碼,所以我無法打開它並更改其行爲。

我認爲實現我的目標的最佳方式是鏡像兔子隊列,並獨立消耗(並且不會干擾)原始消息流。

我看了一下RabbitMQ鏡像,但是這似乎被設計爲在主/從配置中的兩個或多個節點上運行。

我想我要的是:

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

我既需要消費者得到所有相同的消息,所以我不想兩個應用程序從同一個隊列讀取,或者一個新的消費者閱讀關閉隊列然後再放回去。

+0

還應注意的是,應用程序在隊列中的消息的存款也封閉源代碼。 – JimForTheWin

回答

0

鏡像是一種高可用性解決方案,不適合您的要求。

相反,考慮RabbitMQ拆分發布和消費功能。如果現有程序正在發佈到RabbitMQ,只需找出當前應用程序隊列的路由鍵,然後在聲明自己的隊列時使用它。

當匹配路由密鑰時,發佈的消息將流向使用該密鑰的所有隊列。特殊情況包括扇出/話題交換,它們還允許在路由密鑰中使用通配符。

使用直接交換,拓撲居然是:

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

這正是我所期待的。早期測試看起來非常有前途 – JimForTheWin