rabbitmq:消息远程复制(Shovel 插件)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitmq:消息远程复制(Shovel 插件)相关的知识,希望对你有一定的参考价值。
参考技术A 官网参考: https://www.rabbitmq.com/shovel.htmlShovel 可以实现在两个 rabbitmq之间进行消息的远程复制。
利用该组件,可以实现如下业务场景:
cmd 下运行
在Docker下启动rabbitmq容器,并通过--name 指定容器名字为rabbitmq1
进入容器
成功进入容器的界面如下图所示:
在容器中,输入启用插件的命令即可,如下图所示:
如果成功启用,登录WEB管理控制台,将看到如下内容:
定义shovels有两种方式
要实现多个rabbitmq节点远程连接,要求多个节点的网络能连通。
Docker支持多种网络方式,这里使用桥接网络方式。
在桥接方式下,两个容器节点可以互通。
运行两个rabbitmq实例,并添加到之前创建的net4rabbitmq桥接网络
--name参数指定了容器名称
-network 参数指定了桥接网络
--network-alias 指定了网络别名(容器之间可以通过网络别名访问)
分别针对两个docker实例,启用Shovel插件
Shovel可以配置在源节点,也可以配置在目标节点。
下面的示例将在目标节点上进行配置:在rabbitmq2上配置一个shovel,实现将rabbitmq1
上的队列 Q,复制到rabbitmq2的Q队列
进入rabbitmq2的WEB管理控制台,进入Shovel Management,添加一个 shovel,界面如下图所示:
添加后的界面:
可以通过Shovel Status查看shovel状态,如下图:
安装ping命令的方法,安装后即可使用ping
rabbitmq shovel插件
官网说明https://www.rabbitmq.com/shovel.html#management-status
启用shovel插件命令:
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
查看已经安装的插件
rabbitmq-plugins list
shovel 插件的使用存在 static 和 dynamic 两种形式,其主要差异如下
Static Shovels | Dynamic Shovels |
基于 broker 的配置文件进行定义 | 基于 broker 的 parameter 参数进行定义 |
需要重启宿主 broker 以便配置生效 | 可以在任意时间进行创建和删除,直接生效 |
更加通用:任何 queue 、exchange 或 binding 关系均可在启动时手动声明 | 更具有目标性:被 shovel 所使用的 queue 、exchange 和 binding 关系能够自动被声明(创建) |
1.为什么需要使用 shovel 插件?
答:当业务需要可靠且连续地将消息从一个 broker 的 queue 里搬运(转发)到另一个 broker 的 exchange 时(最终达到某个 queue 里 )使用;作为 source 的 queue 和作为 destination 的 exchange 可以位于同一个 broker 上(通常要求处于不同的 vhost 下),也可以位于不同的 broker 上。
2.使用 shovel 插件的好处?
答:shovel 基于 RabbitMQ 的 Erlang 客户端实现,且作为 built-in 插件被使用,故可以随 broker 的启动而自动启动;shovel 具有松耦合特性:通过该插件可以在分属不同管理域下的 broker 或 cluster 之间进行消息的搬运;shovel 具有 WAN 友好特性:基于 AMQP 0-9-1 协议实现,并设计成能够保证在不稳定网络场景下不丢失消息;shovel 具有高度可定制性:允许在 shovel 建立连接后,立即执行指定的 AMQP 方法进行定制化操作(例如声明 queue 的动作);
以上是关于rabbitmq:消息远程复制(Shovel 插件)的主要内容,如果未能解决你的问题,请参考以下文章