29.5. 集群消息分组
不支持此功能。
群集分组遵循与正常消息分组相关的不同方法。在群集中,具有特定组 ID 的消息组可以到达任何节点。节点务必要确定哪些组 ID 绑定到哪个节点上哪个消费者。无论消息组默认到达何处,每个节点负责将消息组路由到拥有消费者处理这些组 ID 的节点。当带有给定组 id 的消息发送到连接到集群中给定节点的特定消费者后,即使消费者断开连接,这些消息也不会发送到另一个节点。
这种情形可通过分组处理程序来解决。每个节点都有一个分组处理程序,此分组处理程序(以及其他处理程序)负责将消息组路由到正确的节点。有两种类型的分组处理程序:LOC AL 和 REMOTE。
本地处理程序负责确定消息组应采用的路由。远程处理程序与本地处理程序通信,并相应地工作。每个群集应当选择具有本地分组处理程序的特定节点,所有其他节点都应具有远程处理程序。
如果群集中使用了消息分组,则配置为远程分组处理程序的节点失败时,它将中断。为远程分组处理程序设置备份将不正确。
最初收到消息组的节点根据常规集群路由条件(循环队列可用性)做出路由决定。节点向对应的分组处理程序提出此决定,后者将消息路由到建议队列(如果它接受该请求)。
如果分组处理程序拒绝该提议,它会提出其他路由,相应地进行路由。其他节点跟随 Suite,并将消息组转发到所选队列。消息到达队列中后,它将固定到该队列上的客户。
您可以使用管理 CLI 配置分组处理程序。以下命令添加带有地址 news.europe.# 的 LOCAL 分组处理程序。
/subsystem=messaging-activemq/server=default/grouping-handler=my-group-handler:add(grouping-handler-address="news.europe.#",type=LOCAL)
/subsystem=messaging-activemq/server=default/grouping-handler=my-group-handler:add(grouping-handler-address="news.europe.#",type=LOCAL)
这将需要重新加载服务器。
reload
reload
下表列出了 grouping -handler 的可配置 属性:
| 属性 | 描述 |
|---|---|
| group-timeout |
使用 |
| grouping-handler-address | 对集群连接及其使用的地址的引用。 |
| Reaper-period |
回收器运行的频率,以检查是否有超时的组绑定(仅适用于 |
| timeout | 等待多久才能做出处理决定;如果达到此超时,则在发送期间引发异常,确保保持严格排序。 |
| type |
处理程序是否为群集的单一本地处理程序,用于做出处理决策,或者是违反了本地处理程序的远程处理程序。可能的值有 |
29.5.1. 集群消息分组的最佳做法 复制链接链接已复制到粘贴板!
集群分组的一些最佳实践如下:
- 如果您定期创建和关闭消费者,请确保您的使用者在不同节点上均匀分布。固定队列后,消息将自动传输到该队列,无论客户从队列中移除。
- 如果您要删除绑定了消息组的队列,请确保正在发送消息的会话将删除队列。这样做可确保其他节点在移除后不会尝试将消息路由到此队列。
- 作为故障转移机制,始终复制具有本地分组处理程序的节点。