原理我就不多说了,请自行参阅https://www.rabbitmq.com/shovel.html
在我们实现开发过程中,很常见的应用场景就是一个功能服务设置一个vhost来进行功能管理划分及隔离,这样即方便进行权限管理,也方便消息隔离,但是rabbitmq的vhost相当于虚拟机的概念,vhost之间是物理隔离的,无法进行互通。
好了,那么问题来了,我们一个典型的场景就是我有一个活动的服务,他拥有自己的vhost-1,然后我有一个红包的服务,他也有自己的vhost-2,但是有业务需求要求活动服务给红包服务发送队列消息,但是两个vhost又是不能互通的,这就尴尬了。
还好,rabbitmq提供了一个插件 shovel,他相当于建立一个消费者,来将消息从一个队列转移到另一个队列.
下面说一下具体的设计过程
首先在源mq里执行如下命令,安装插件
rabbitmq-plugins enable rabbitmq_shovel
执行后,找开mq的web管理界面,可以看到
将对应的信息填好,这里注意,因为我们建vhost的时候一般喜欢带个“/”,但是,在uri中直接填“/”他会当成路径来处理,所以这个地方要用%2f来转义。其它的就是将你源队列及目录队列信息填好,然后添加即可。
添加后,在shovel status菜单中可以看到如下,state为runing状态,即为正常添加成功。可以在web页面发个消息进行测试。