16.5. 配置集群消息分组
消息分组可让客户端发送特定类型的消息组,以便由同一消费者按顺序处理。通过为集群中的每个代理添加将处理程序分组,您可以确保客户端可以将分组的消息发送到集群中的任何代理,并且仍具有相同消费者使用的正确消息。
有两种分组处理程序: 本地 处理程序和 远程处理程序。它们可让代理集群将特定组中的所有信息路由到适当的队列中,以便预期的消费者可以使用正确的顺序使用它们。
先决条件
集群中每个代理上应该至少有一个消费者。
当消息固定到队列中的消费者时,具有相同组 ID 的所有消息都将路由到该队列。如果移除了使用者,则队列将继续接收消息,即使没有使用者也是如此。
步骤
在集群中的一个代理上配置本地处理程序。
如果您使用高可用性,则应该是一个 master 代理。
-
打开 broker 的
<broker-instance-dir>/etc/broker.xml
配置文件。 在
<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 的
如果使用高可用性,请将本地处理器配置复制到主代理的 slave 代理。
将本地处理程序配置复制到从属代理可防止本地处理程序的单点故障。
在集群的每个剩余代理上,配置远程处理程序。
-
打开 broker 的
<broker-instance-dir>/etc/broker.xml
配置文件。 在
<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 毫秒。将此值设置为本地处理程序的值至少为一半。
-
打开 broker 的
其他资源
-
有关为消息分组配置了代理集群的示例,请参阅
集群
组 AMQ Broker 示例程序。