前面章节介绍了怎样安装 Shovel 插件,本章将介绍 Shovel 插件的基本用法。Shovel 既可以部署在源端,也可以部署在目的端。有两种方式可以部署 Shovel:
静态方式(static):指在 rabbitmq.config 配置文件中设置
动态方式(dynamic):指通过 Runtime Parameter 设置
下面主要介绍动态方式,与 Federation upstream 类似,Shovel 动态部署方式的配置信息会被保存在 RabbitMQ Mnesia 数据库中,包括权限信息、用户信息和队列信息等等。每一个 Shovel 连接都由一个相应的 Parameter 定义,这个 Parameter 同样可以通过 rabbitmqctl 工具、 RabbitMQ Management 插件的 HTTP API 接口或者 rabbitmq_shovel_management 提供的 Web 管理界面进行设置。
接下来将介绍 rabbitmq_shovel_management 提供的 Web 管理界面进行设置。其中,有两个 broker,分别为 broker1(192.168.116.51)和 broker2(192.168.116.52),broker1 作为目标,broker2 作为数据源。我们将在 broker1 上面创建 Shovel,用户在 broker2 队列上发布消息,将会自动同步到 broker1 的队列中,最后进行消费。详细配置步骤如下:
使用浏览器访问 http://192.168.116.51:15672/#/exchanges 地址,点击“Add a new exchange”按钮去添加一个交换器,如下图:
上图中,添加了一个名为“shovel-exchange”,类型为 topic,可持久化的交换器 exchange。效果如下图:
使用浏览器访问 http://192.168.116.51:15672/#/queues 地址,点击“Add a new queue”按钮创建一个队列,如下图:
上图中,创建了一个名为“shovel-queue”的,可持久化的队列。效果如下图:
在 exchange 页面选中刚刚创建的 shovel-exchange 交换器,即访问http://192.168.116.51:15672/#/exchanges/%2F/shovel-exchange 地址,点击“Add binding from this exchange”按钮去绑定一个队列到当前交换器。如下图:
上图中将队列“shovel-queue”队列使用“shovel-rk”绑定 key 绑定到 shovel-exchange 交换器。效果如下图:
使用浏览器访问 http://192.168.116.51:15672/#/dynamic-shovels 地址(“Admin”>“Shovel Management”),点击“Add a new shovel”按钮去添加一个 Shovel,如下图:
上图中,添加了一个名为“shovel-demo”的 Shovel。其中各个参数含义如下:
Name:表示 Shovel 的名称。
Source:用来定义数据的来源。首先选择的是 AMQP 的协议版本,然后就是进行 URI 的定义。URI 定义有 6 种方式:
URI:定义数据来源的 AMQP URL 地址。例如:amqp://root:123456@192.168.116.52:5672
Prefetch count:用来指定消息可以从源目标一次传送多少消息给目的目标,默认是1000。
Auto-delete:是否自动删除,默认是 never。never 表示不删除,直到明确的进行删除。after initial length transferred 表示 Shovel 启动时会检查队列的长度,它将传输消息,然后删除自己。
Routing key:如果选择数据源为交换器 exhcange,则这里将设置路由 key。
Destination:目标目的的定义,它与source定义的内容差不多,没有Prefetch count和Auto-delete,多了一个Add forwarding headers,它表示是否向被铲起的消息添加报头,指示它们从何处被铲起,以及从何处被铲起。如果没有设置,则默认为false。
URI:定义目标地址 AMQP 地址,例如:amqp://root:123456@192.168.116.51:5672
Add forwarding headers:是否将标头添加到已 Shovel 的消息中,以指示它们已被 Shovel 和 Shovel 的位置。如果未设置,则默认为 false。
Routing key:如果选择交换器 exchange 作为目标,则这里将设置路由 key。
Reconnect delay:一个 Shovel 节点丢失后等待多长时间进行自动重连,默认是1秒。
Acknowledgement mode:消息确认模式,有 on-confirm、on-publish 和 no-ack 三种方式。含义分布如下:
(1)on-confirm 默认的确认方式,它需要在目的目标消息得到确认后才进行源目标消息的删除,是最可靠的消息处理方式。不管是网络错误还是消息节点失败都不会丢失消息,这种方式处理最慢。
(2)on-publish 源目标将消息发送给目的目标消息就进行确认了,这种情况在网络错误时可以进行重发,但是在消息节点失败时会丢失消息。
(3)no-ack 不需要确认就可以进行消息删除。这种方式最不安全对于消息来说,但是却是最快的。
添加完成后,效果如下图:
点击“Admin”>“Shovel Status”,查看已经创建 Shovel 的状态信息。如下图:
前面已将在 broker1 上面创建好队列、交换器和 Shovel,接下来转移到 broker2,发布消息。
使用浏览器访问 http://192.168.116.52:15672/#/queues 地址(点击“Admin”>“Queue”),如下图:
选中“shovel-queue”队列(即访问 http://192.168.116.52:15672/#/queues/%2F/shovel-queue),点击“Publish message”按钮去发布消息,如下图:
上图中,发送了一个内容为“hello message”的消息。
消息发布成功后,继续回到 broker1 中,点开刚刚创建的 shovel-queue 队列(地址:http://192.168.116.51:15672/#/queues/%2F/shovel-queue),点击“Get Message)按钮去消费一个消息。如下图:
从上图可知,我们收到了一条内容为“hello message”的消息。
到这里 Shovel 的基本使用演示完成了,更多关于 Shovel 的用法,读者自行探索。