rabbitmq級聯之shovel插件和exchange.bind

有時候,因爲各方面緣由好比安全緣由、系統間隔離,咱們須要實如今多個rabbitmq實例或者一個rabbitmq實例的多個vhost間推送消息。在上一版的實現中,公司使用java自行實現了一個相似轉發器的功能,其結構爲:html

內部MQ->java-pusher->外部MQjava

其中在java-pusher的配置文件裏面定義內部MQ和外部MQ各隊列之間的映射關係。這樣作除了額外的開發和維護成本外,必定程度還增長了系統資源的消耗。最近在測試rabbitmq cluster的各類異常恢復時,發現其提供了一個原生的 實現級聯功能的插件shovel,雖然他被歸爲HA一類,但實際上應該還算不上。web

shovel能夠在rabbitmq.config中配置,也能夠經過web控制檯進行配置。安全

同其餘插件好比trace同樣,首先須要啓用插件自身以及相應的管理插件。測試

[root@iZ23nn1p4mjZ bin]# rabbitmq-plugins enable rabbitmq_shovel

   [root@iZ23nn1p4mjZ bin]# rabbitmq-plugins enable rabbitmq_shovel_management
   Plugin configuration unchanged.插件

   Applying plugin configuration to rabbit@iZ23nn1p4mjZ... nothing to do.code

   啓用後在控制檯Admin頁面就多了兩個tab,以下:htm

除此以外,rabbitmq還支持exchange 2 exchange的綁定,這樣能夠在不引入shovel的前提下,實現更爲靈活的路由策略,以下:blog

 

java中綁定:rabbitmq

Channel ch = conn.createChannel();
ch.exchangeBind("destinationExch", "sourceExch", "routingKey");

此時,消費者獲得的exchange仍然是發佈時的exchange,後需通過的exhange不會修改原始exhcange。

不過,要是用的是rpc模式,就不知道shovel是什麼結果了。

參考:

https://www.rabbitmq.com/shovel.html#management-status

http://www.rabbitmq.com/blog/2010/10/19/exchange-to-exchange-bindings/

 https://www.zhihu.com/question/41976893

https://www.rabbitmq.com/shovel.html

相關文章
相關標籤/搜索