文章目录
  1. 1. rabbitmq之shovel插件如何使用及注意事项
    1. 1.1. shovel 插件工作原理
    2. 1.2. shovel 如何使用
    3. 1.3. 配置说明
    4. 1.4. 各团队中的使用配置规则

rabbitmq之shovel插件如何使用及注意事项

此篇文章本来发表在我厂内部文档库中,由于本人年后准备异动,现将此文转出此本人私有站点中

Shovel是分布式消息传递工具包中的一种极简但灵活的工具,可以容纳许多用例。

以下是官网列举的四项功能:

  • 可以应对不同的平台进行消息传递,藕合性低。
  • 可以在RabbitMQ的不同版本上运行,兼容性强。
  • 可使用不同的消息传递产品或协议。
  • 可使用不同的用户和虚拟主机进行传输对接,包容性好。

shovel 插件工作原理

image-20220112170315159

Shovel是RabbitMQ的一个插件,这个插件的功能就是将源节点的消息发布到目标节点,这个过程中Shovel就是一个客户端,它负责连接源节点,读取某个队列的消息,然后将消息写入到目标节点的exchange/queue中。根据这么一个概念,其实也可以自己开发一个简单的程序,负责从一个节点读取数据然后发送到目标节点。

本质上,shove就像一个消息泵,它主要做了以下的事情:

  • 连接集群源节点和目标节点
  • 从队列中消费消息
  • 重新发布消息到目标节点
  • 在两端使用数据安全功能保障数据安全,并处理故障

相当于一个中转站,将消息中转到另一端。

shovel 如何使用

安装:

只要进入rabbitmq后台,安装:

1
rabbitmq-plugins ``enable` `rabbitmq_shovel``rabbitmq-plugins ``enable` `rabbitmq_shovel_management

注意,源节点和目标节点都要安装此插件。

然后在后台控制台管理页设置:

image-20220112170410656

注意:必须将shovel设置在目标集群方向,可以保证消息不丢失。

配置说明

  • Name:该Shovel配置的名称
  • Source:Source中需要指定协议类型、连接的源节点地址,源端的类型(队列、交换器,如果是交换器还需要填入routingKey)
  • Prefetch count:该参数表示Shovel内部缓存的消息条数,可以参考Federation的相关参数。Shovel的内部缓存是源端服务器和目的端服务器之间的中间缓存部分
  • Auto-delete:默认为Never表示不删除自己,如果设置为After initial length transferred,则再消息转移完成后删除自己。
  • Destination:Destination需要指定协议类型,连接的目的节点地址,目的端的类型(队列、交换器,如果是交换器还需要填入routingKey)
  • Add forwarding headers:如果设置为true,则会在转发的消息内添加x-shovelled的header属性
  • Reconnect delay:指定在Shovel link失效的情况下,重新建立连接前需要等待的时间,单位为秒。如果设置为0,则不会进行重连动作,即Shovel会在首次连接失效时停止工作。默认为1秒。
  • Acknowledgement mode:参考Federation的配置。no ack表示无须任何消息确认行为;on publish表示Shovel会把每一条消息发送到目的端之后再向源端发送消息确认; on confirm表示Shovel会使用publisher confirm机制,在收到目的端的消息确认之后再向源端发送消息确认。

注意:

  1. 必须将Acknowledgement mode 设置成:on publish , 否则消息转输会很慢,因为如果是on conform的话,它会等待源回应后才会往下转,会很慢
  2. source和Destination的协议版本都填0.9.1
  3. prefetch count 没有特殊要求,不要填(默认是1000)
  4. Reconnect deplay 填5s,如果觉得1s也够的也可不填(默认是1s)
  5. auto delete 为nerver

source 和Destination的内容规则:

amqp://[用户名:密码]@[连接地址:5672]/[vhost]

例子:

amqp://test:test@xxx.com:5672/test

各团队中的使用配置规则

根据各自不同业务要求,进行shovel配置,以下列出不同使用场景:

  1. 源已经有消费者的,但需要将生产者的所有消息分发给目标集群的

source 到 \Destination 的类型应该配置成,exchange ——> exchange**

\这样两个集群的各自消费相互不影响**

\2. 源有消费者,但源的消费者消费能力有限,希望分发给其它集群帮助消费

source 到 \Destination 的类型应该配置成,queue ——> exchange**

\
**

\3. 源无消费者,但希望将源的队列实时转移到目标集群的队列中进行消费**

source 到 \Destination 的类型应该配置成,queue ——> queue**

4. 源有消费者,但希望将源消息转存到目标集群,目标集群只做持久化或者延后消费

source 到 \Destination 的类型应该配置成,exchange ——> queue**

\
**

\
**

文章目录
  1. 1. rabbitmq之shovel插件如何使用及注意事项
    1. 1.1. shovel 插件工作原理
    2. 1.2. shovel 如何使用
    3. 1.3. 配置说明
    4. 1.4. 各团队中的使用配置规则