Shovel
shovel 是rabbitMQ的一个插件可以把源节点消息发送到目标节点。
优点
- 松耦合:Shovel 可以在不同的 Broker和集群上传递消息,源节点和目标节点可以使用不同的用户和vhosts,不同的RabbitMQ版本。
- 支持多个版本的AMQP协议
- 支持广域网可以容忍网络断断续续保证可靠性。
原理
使用
首先开启插件
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_shovel_management
静态方式:在 rabbitmq.config 配置文件中针对 Shove1 插件的配置
动态方式:
1.Prefetch count
允许允许Shovel内部缓存消息条数默认1000(未ack的数据)。
2.Auto-delete:
- Never:一直执行。
After initial length transferred:
Shovel启动时判断源节点query数量,向目标节点同步完这个数量的消息后自动删除Shovel。
Acknowledgement mode :表示在完成转发消息时的确认模式有三种
- no ack 表示无须任何消息确认行为;
- on publish 表示 Shovel 会把每 一 条消息发送到 目的端之后再向源端发送消息确认;
- on confirm 表示 Shovel 会使用 publisher confmn 机制, 在收到目的端的消息确认之后再向源端发送消息确认。(默认值 官方推荐 选择其他值性能略有提升但是影响消息可靠性)
Reconnect delay
连接失效后几秒后重试默认5秒。
Add forwarding headers
设置为 true,则会在转发的消息内添加 x-shovelled 的 header属性。
Federation
Federation 可以在不同broker 中传递消息
优点:
- 松耦合:Shovel 可以在不同的 Broker和集群上传递消息,源节点和目标节点可以使用不同的用户和vhosts,不同的RabbitMQ版本。
- 支持广域网可以容忍网络断断续续保证可靠性。
使用
开启插件
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management