RabbitMQ 教程

Shovel 插件 WEB 管理界面

前面章节介绍了怎样安装 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 交换器。效果如下图:

创建 Shovel

使用浏览器访问 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 的用法,读者自行探索。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号