14.5. 配置集群消息分组
通过消息分组,客户端能够发送由同一消费者序列处理特定类型的消息组。通过向集群中的每个代理添加分组处理程序,您可以确保客户端可以将分组的消息发送到集群中的任何代理,并且仍以正确顺序使用这些消息。
群集提供并行性,使您能够水平扩展,而分组则提供序列化技术,以将分组消息定向到特定的使用者。
红帽建议您使用集群 或 分组,并避免使用集群和分组。
有两种类型的分组处理程序: 本地处理程序 和远程处理程序。它们可让代理集群将特定组中的所有消息路由到适当的队列,以便预期消费者能够以正确的顺序消耗它们。
先决条件
集群中每个代理应至少有一个消费者。
当消息固定到队列上的使用者时,具有相同组 ID 的所有消息都将路由到该队列。如果移除使用者,队列将继续接收消息,即使没有消费者也是如此。
流程
在群集中的一个代理上配置本地处理程序。
如果您使用高可用性,这应该是 master 代理。
-
打开代理的
<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 将消息转发到该队列。如果代理的路由建议被拒绝,则它提议了一个替代路由,重复该过程,直到路由被接受。
-
打开代理的
如果您使用高可用性,请将本地处理器配置复制到 master 代理的 slave 代理。
将本地处理程序配置复制到从代理可防止本地处理程序出现单点故障。
在集群中的每个剩余的代理中,配置一个远程处理器。
-
打开代理的
<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 毫秒。将此值设置为本地处理程序值至少一半。
-
打开代理的
其它资源
-
有关为消息分组配置的代理集群示例,请参阅 clustered
-grouping
AMQ Broker 示例程序。