rabbitmq级联之shovel插件和exchange.bind
有时候,由于各方面原因比如安全原因、系统间隔离,我们需要实现在多个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的更多相关文章
- rabbitmq shovel插件
官网说明https://www.rabbitmq.com/shovel.html#management-status 启用shovel插件命令: rabbitmq-plugins enable rab ...
- RabbitMQ通过shovel插件迁移数据
前言 生产环境中会遇到RabbitMQ数据迁移的场景,例如:切换云服务厂商.不同Region之间数据迁移.新搭建RabbitMQ实例,数据需要同步至新的RabbitMQ实例. 前提条件: 源Rabbi ...
- RabbitMQ 入门 (Go) - 4. 使用 Fanout Exchange 做服务发现(上)
到目前为止,我们项目的结果大致如下: 传感器生成的模拟数据(包含传感器名称.数据.时间戳)是通过传感器在运行时动态创建的 Queue 来发送的.这些 Queue 很难直接被发现. 为了解决这个问题,我 ...
- 消息中间件-RabbitMQ消息可靠性和插件化机制
package com.study.rabbitmq.a132.confirm; import com.rabbitmq.client.*; import java.io.IOException; i ...
- docker安装RabbitMQ及安装延迟插件
我这个安装攻略首先得保证服务器上安装过docker了 如果没安装docker请先去安装docker 1.首先说一下什么是MQ MQ(message queue)字面意思上来说消息队列,FIFO先入先出 ...
- RabbitMQ入门:主题路由器(Topic Exchange)
上一篇博文中,我们使用direct exchange 代替了fanout exchange,这次我们来看下topic exchange. 一.Topic Exchange介绍 topic exchan ...
- 【RabbitMQ】4、三种Exchange模式——订阅、路由、通配符模式
前两篇博客介绍了两种队列模式,这篇博客介绍订阅.路由和通配符模式,之所以放在一起介绍,是因为这三种模式都是用了Exchange交换机,消息没有直接发送到队列,而是发送到了交换机,经过队列绑定交换机到达 ...
- PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (三) -- Header Exchange
此模式下,消息的routing key 和队列的 routing key 会被完全忽略,而是在交换机推送消息和队列绑定交换机时, 分别为消息和队列设置 headers 属性, 通过匹配消息和队列的 h ...
- PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (二) -- Topic Exchange 和 Fanout Exchange
Topic Exchange 此模式下交换机,在推送消息时, 会根据消息的主题词和队列的主题词决定将消息推送到哪个队列. 交换机只会为 Queue 分发符合其指定的主题的消息. 向交换机发送消息时,消 ...
随机推荐
- Mac为python2.7.10安装pip
首先下载get-pip.py https://bootstrap.pypa.io/get-pip.py alias python="/usr/bin/python2.7" pyth ...
- vue中打印显示++的问题解决方案(做成类似同步的操作就行了)
这个问题,困扰我很久很久 怎么实现的呢?首先进入页面就开始调取打印接口,打印接口的成功回调函数里面写 this.hasOut++(这是实时显示的数量)this.width=(this.hasOut/t ...
- cocos2d-x JS 富文本(为一段文本中的个别字体上颜色)
setWinText : function (levelStr1,levelStr2,levelStr3,color1,color2) { var imgRankingBG = this.contai ...
- cocos2dx JS 清除缓存重新编译打包安卓apk
复制他人工程时打包出错,无法进行.或者是资源缓存问题需要重新编译删除 proj.android 工程下的三个文件夹 frameworks -> runtime-src -> proj.an ...
- 转git的使用
git的使用(包括创建远程仓库到上传代码到git的详细步骤以及git的一些常用命令) A创建远程仓库到上传代码到git 1)登陆或这注册git账号 https://github.com 2)创建远程仓 ...
- servlet 的servletContext
- Oracle的下载安装教程以及所出现的问题
1.下载地址 64位 https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft ...
- web前端名词
HTML: HyperText Markup Language 超文本标记语言 XHTML:Extensible HyperText Markup Language 可扩展性超文本标记语 ...
- Vue系列之 => vue组件创建
创建方式 一 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- sitecore系列教程之改进Sitecore编辑体验的5个步骤
Sitecore完全关注客户体验,在适当的时间为合适的人提供合适的体验.虽然没有人会不同意客户体验是王道,但我们仍然需要记住每天使用Sitecore的人们为客户带来惊人体验的体验. 我看到无数客户通过 ...