14.5. 配置集群消息分组
消息分组可让客户端发送特定类型的消息组,以便按同一消费者按顺序处理。通过向集群中的每个代理添加分组处理程序,您可以确保客户端可以向集群中的任何代理发送分组消息,并仍能以同一消费者使用正确顺序使用这些消息。
集群提供并行性,使您能够水平扩展,而分组技术则为特定消费者直接分组的消息。
红帽建议您使用集群或分组,并避免将集群和分组一起使用。
有两种分组处理程序:local handlers 和 remote handlers。它们可让代理集群将特定组中的所有消息路由到适当的队列,以便预期消费者以正确顺序使用它们。
先决条件
集群中每个代理上应该至少有一个消费者。
当消息固定到队列中的消费者时,具有相同组 ID 的所有消息都将路由到该队列。如果删除了使用者,队列仍会在没有消费者的情况下收到消息。
流程
在集群中的一个代理上配置本地处理器。
如果您使用高可用性,则应该是 master 代理。
-
打开代理的 <
broker_instance_dir> /etc/broker.xml
配置文件。 在 &
lt;core
> 元素中添加本地处理器:本地处理程序充当远程处理程序的仲裁符。它存储路由信息并将其与其他代理通信。
<configuration> <core> ... <grouping-handler name="my-grouping-handler"> <type>LOCAL</type> <timeout>10000</timeout> </grouping-handler> ... </core> </configuration>
grouping-handler
-
使用
name
属性指定分组处理程序的唯一名称。 type
-
把它设置为
LOCAL
。 timeout
等待(以毫秒为单位)等待多长时间以便决定路由邮件的位置。默认值为 5000 毫秒。如果在做出路由决策前达到超时,则引发异常,以确保严格的消息排序。
当代理收到带有组 ID 的消息时,它会将路由引入到消费者所附加的队列。如果路由被集群中的其他代理中的分组处理程序接受,则建立路由:集群中所有代理的所有代理都会将带有此组 ID 的消息转发到该队列。如果代理的路由提议被拒绝,那么它将给出一个替代路由,重复这个过程,直到接受路由为止。
-
打开代理的 <
如果您使用高可用性,请将本地处理器配置复制到主代理的从代理中。
将本地处理器配置复制到从属代理可防止本地处理程序的单点故障。
在集群的每个剩余代理中配置远程处理器。
-
打开代理的 <
broker_instance_dir> /etc/broker.xml
配置文件。 在 &
lt;core
> 元素中添加远程处理器:<configuration> <core> ... <grouping-handler name="my-grouping-handler"> <type>REMOTE</type> <timeout>5000</timeout> </grouping-handler> ... </core> </configuration>
grouping-handler
-
使用
name
属性指定分组处理程序的唯一名称。 type
-
将其设置为
REMOTE
。 timeout
- 等待(以毫秒为单位)等待多长时间以便决定路由邮件的位置。默认值为 5000 毫秒。将此值设置为本地处理程序的值至少一半。
-
打开代理的 <
其他资源
-
有关为消息分组配置的代理集群示例,请参阅
集群组
AMQ Broker 示例程序。