RabbitMq shovel 将一个实例的消息转发到另一个实例的队列
RabbitMq shovel 将一个实例的消息转发到另一个实例的队列
一、shovel是什么?
其实,shovel和上一篇博客中的federation的功能是类似的,都是为了MQ间的消息同步。不同的是,federation需要每个MQ上都配置,它只是个拉取消息的功能,而shovel只需要在一个MQ上配置即可,它是个双向的动作,既能拉取消息,也能推送消息,所以只需要知道一台服务器ip就能实现双向通信,这在某些特定的场景下是特别适合的,比如有一台服务器的ip是不确定的。
一般情况下都是一个MQ的队列和另一个MQ的交换机进行通信,当然这也不是必须的,只是普遍这么使用。通过配置证明,队列与队列、队列与交换机、交换机与交换机都是可以实现通信的,只是需要注意的一个原则是,队列是不保存消息的,交换机是本地保存消息的。比如队列收到了消息,然后直接就转发到配置的下游,本队列中是不保存消息,而交换机除了转发走,还要本地保存,可以本地队列消费。
二、优势
1、松耦合。shovel可以移动位于不同管理域中的Broker(或者集群)上的消息,这些Broker(或者集群)可以包含不同的用户和虚拟主机,也可以使用不同的RabbitMQ和Erlang版本;
2、支持广域网。shovel插件同样基于AMQP协议在Broker之间进行通信,被设计成可以容忍时断时续的连通情况,并且能够保证消息的可靠性;
3、高度定制。当shovel成功连接后,可以对其进行配置以执行相关的AMQP命令。
三. 解决问题:将一个rabbitmq的消息,通过插件shove将信息转发到另一个rabbitmq,实现跨实例建消息转发
四.使用方法:
1.华为 云平台 --插件管理--开启 rabbitmq_shovel 插件
2.打开第1个rabbtimq web管理界面: http://IP:15672/#/dynamic-shovels admin--shovel -management --add shovel
3.add shovel格式:
source:
Virtual hos:/
Name: shovel-test
source url://ampq://whaleUser:pwd@pwd@ip:5672/%2F (shoveluser:pwd@172.23.40.1:5672/%2F)
queue: queue name
destination:
source url://ampq://whaleUser:pwd@pwd@ip2:5672/%2F (shoveluser:pwd@172.23.40.2:5672/%2F)
queue: queue name
%2F: virtual host:All MQ虚拟机
- exchanges 绑定转发的队列,目标rabbitmq接收这个队列的消息
5.第2个rabbtima 的队列 接收转发的消息