有时候,由于各方面原因比如安全原因、系统间隔离,我们需要实现在多个rabbitmq实例或者一个rabbitmq实例的多个vhost间推送消息。在上一版的实现中,公司使用java自行实现了一个类似转发器的功能,其结构为:

内部MQ->java-pusher->外部MQ

其中在java-pusher的配置文件里面定义内部MQ和外部MQ各队列之间的映射关系。这样做除了额外的开发和维护成本外,一定程度还增加了系统资源的消耗。最近在测试rabbitmq cluster的各种异常恢复时,发现其提供了一个原生的 实现级联功能的插件shovel,虽然他被归为HA一类,但实际上应该还算不上。

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.

启用后在控制台Admin页面就多了两个tab,如下:

除此之外,rabbitmq还支持exchange 2 exchange的绑定,这样可以在不引入shovel的前提下,实现更为灵活的路由策略,如下:

java中绑定:

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

rabbitmq级联之shovel插件和exchange.bind的更多相关文章

  1. rabbitmq shovel插件

    官网说明https://www.rabbitmq.com/shovel.html#management-status 启用shovel插件命令: rabbitmq-plugins enable rab ...

  2. RabbitMQ通过shovel插件迁移数据

    前言 生产环境中会遇到RabbitMQ数据迁移的场景,例如:切换云服务厂商.不同Region之间数据迁移.新搭建RabbitMQ实例,数据需要同步至新的RabbitMQ实例. 前提条件: 源Rabbi ...

  3. RabbitMQ 入门 (Go) - 4. 使用 Fanout Exchange 做服务发现(上)

    到目前为止,我们项目的结果大致如下: 传感器生成的模拟数据(包含传感器名称.数据.时间戳)是通过传感器在运行时动态创建的 Queue 来发送的.这些 Queue 很难直接被发现. 为了解决这个问题,我 ...

  4. 消息中间件-RabbitMQ消息可靠性和插件化机制

    package com.study.rabbitmq.a132.confirm; import com.rabbitmq.client.*; import java.io.IOException; i ...

  5. docker安装RabbitMQ及安装延迟插件

    我这个安装攻略首先得保证服务器上安装过docker了 如果没安装docker请先去安装docker 1.首先说一下什么是MQ MQ(message queue)字面意思上来说消息队列,FIFO先入先出 ...

  6. RabbitMQ入门:主题路由器(Topic Exchange)

    上一篇博文中,我们使用direct exchange 代替了fanout exchange,这次我们来看下topic exchange. 一.Topic Exchange介绍 topic exchan ...

  7. 【RabbitMQ】4、三种Exchange模式——订阅、路由、通配符模式

    前两篇博客介绍了两种队列模式,这篇博客介绍订阅.路由和通配符模式,之所以放在一起介绍,是因为这三种模式都是用了Exchange交换机,消息没有直接发送到队列,而是发送到了交换机,经过队列绑定交换机到达 ...

  8. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (三) -- Header Exchange

    此模式下,消息的routing key 和队列的 routing key 会被完全忽略,而是在交换机推送消息和队列绑定交换机时, 分别为消息和队列设置 headers 属性, 通过匹配消息和队列的 h ...

  9. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (二) -- Topic Exchange 和 Fanout Exchange

    Topic Exchange 此模式下交换机,在推送消息时, 会根据消息的主题词和队列的主题词决定将消息推送到哪个队列. 交换机只会为 Queue 分发符合其指定的主题的消息. 向交换机发送消息时,消 ...

随机推荐

  1. js并归排序的思路

    并归排序,就是分而治之,将长的数组分解为短的数组,一直分到最后,单个单个数组,我们就认为,只有一个元素的数组是有序的.然后再逐个的合并 1.拆分: 很容易 例如数组  [ 2,4,3,5,1,6,8, ...

  2. CentOS6.5安装zookeeper-3.4.5(单机)

    1.下载 下载链接:http://archive.apache.org/dist/zookeeper/ 本文下载版本:zookeeper-3.4.5.tar.gz 2.安装 安装目录:/usr/loc ...

  3. Oracle相关安装经验总结

    1. 安装的是oracle 12c client for windows,从同事处拿到的,说是64位的,不过我没有找到包含有64这样的文件名或者里面内容有64位的.从同事处拿到的plsqldev110 ...

  4. 5.C#释放非托管资源1

    释放非托管资源 在介绍释放非托管资源的时候,我觉得有必要先来认识一下啥叫非托管资源,既然有非托管资源,肯定有托管资源. 托管资源指的是.net可以自棕进行回收的资源,主要是指托管堆上分配的内存资源.托 ...

  5. openCV学习——一、图像读取、显示、输出

    openCV学习——一.图像读取.显示.输出   一.Mat imread(const string& filename,int flags=1),用于读取图片 1.参数介绍 filename ...

  6. 基于MySQL提供的Yum repository安装MySQL5.6

    基于MySQL提供的Yum repository安装MySQL5.6 1:下载YUM包 1.1切换到root用户: 1)su - root 2)wget http://dev.mysql.com/ge ...

  7. HDU 1087 最长不下降子序列 LIS DP

    Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. May ...

  8. html5-css渐变色

    div{    width: 300px;    height: 100px;    margin: 50px;    padding: 50px;    border:5px groove rgba ...

  9. SQl server更新某阶段的匹配关系。

    DECLARE @count INTEGERDECLARE @id INTEGERDECLARE @subjectID INTEGERSET @count=1SET @id =11894SET @su ...

  10. tomcat的JVM调优

    1.error场景 Tomcat 长期运行过程遇到Caused by: java.lang.OutOfMemoryError: PermGen space或java.lang.OutOfMemoryE ...