14.4. 启用消息重新发布
如果您的代理集群配置了 message-load-balancing
设置为 ON_DEMAND
或 OFF_WITH_REDISTRIBUTION
,您可以配置消息 重新发布 以防止消息在没有消费者使用的队列中"stuck"。
本节包含有关以下内容的信息:
14.4.1. 了解消息再发布 复制链接链接已复制到粘贴板!
代理集群使用负载均衡来在集群中分发消息负载。在集群连接中配置负载均衡时,您可以使用以下 message-load-balancing
设置启用重新发布:
-
ON_DEMAND
- 启用负载平衡并允许重新发布 -
OFF_WITH_REDISTRIBUTION
- 禁用负载均衡,但允许重新发布
在这两种情况下,代理只会将消息转发到具有匹配消费者的其他代理。此行为可确保消息不会移到没有用户使用消息的队列。但是,如果用户在消息转发到代理后附加到队列关闭,则这些消息将变为队列中的"stuck",且不会被使用。此问题有时被称为 不足状态。
消息重新发布通过自动重新分发消息从没有消费者为具有匹配消费者的集群中的代理队列进行分发。
使用 OFF_WITH_REDISTRIBUTION
时,代理只会将消息转发到具有匹配消费者的其他代理(如果没有活跃消费者),允许您在消费者不可用时提供替代方案。
消息重新发布支持使用过滤器(也称为 选择器),也就是说,当消息与可用本地消费者的选择器不匹配时,会重新分发消息。
其他资源
- 有关集群负载均衡的更多信息,请参阅 第 14.1.1 节 “代理集群如何平衡消息负载”。
14.4.2. 配置消息重新发布 复制链接链接已复制到粘贴板!
此流程演示了如何通过负载平衡配置消息重新发布。如果您希望在没有负载均衡的情况下重新发布消息,请将 < ;message-load-balancing&
gt; 设置为 OFF_WITH_REDISTRIBUTION
。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 在 &
lt;cluster-connection&
gt; 元素中,验证<message-load-balancing
> 是否已设置为ON_DEMAND
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 <
;address-settings
> 元素中,为队列或一组队列设置 redistribution delay。在本例中,在最后一个消费者关闭后,对
my.queue
的消息负载均衡将重新分发 5000 毫秒。Copy to Clipboard Copied! Toggle word wrap Toggle overflow address-setting
-
将
match
属性设置为您要重新分发消息的队列的名称。您可以使用代理通配符语法来指定队列的范围。更多信息请参阅 第 4.2 节 “将地址设置应用到一组地址”。 redistribution-delay
-
代理应在此队列的最终消费者关闭后等待的时间(以毫秒为单位),然后再将消息重新分发到集群中的其他代理。如果将其设置为
0,
则会立即重新分发消息。但是,您应该在 redistributing 之前设置延迟 - 通常与消费者关闭,但需要在同一队列中快速创建另一个延迟。
- 对集群中的每个额外代理重复此步骤。
其他资源
-
有关重新分发消息的代理集群配置示例,请参阅
queue-message-redistribution
示例。