16.4. 启用消息重新发布
如果您的代理集群使用 on-demand 消息负载均衡,您可以配置 消息重新分发以防止消息在没有 消费者使用消息的队列中是"stuck"。
本节包含有关:
16.4.1. 了解消息重新分发
代理集群使用负载均衡来在集群中分发消息负载。在集群连接中配置负载均衡时,如果您将 message-load-balancing
设置为 ON_DEMAND
,则代理仅将消息转发到具有匹配使用者的其他代理。此行为可确保消息不会移到没有消费者使用消息的队列。但是,如果在将消息转发到代理后与队列连接有一个接近的使用者,这些消息会成为队列中的"stuck",且未被使用。此问题有时称为 星号。
消息重新分发通过自动将消息从没有消费者到具有匹配使用者的代理的队列自动重新分发,从而防止出现混乱的问题。
16.4.1.1. 使用消息过滤器重新分配消息的限制
消息 重新分发不支持 使用者使用过滤器(也称为 选择器)。带有过滤器的用户的常见用例是请求模式,使用关联 ID。例如,请考虑以下情境:
-
您有一个两个代理(
brokerA
和brokerB
)集群。每个代理都配置,将redistribution-delay
设置为0,
将message-load-balancing
设置为ON_DEMAND
。 -
brokerA
andbrokerB
each has a queue namedmyQueue
. -
根据请求,生产者发送发送到
brokerA
上队列myQueue
的消息。该消息具有关联 ID 属性,名为myCorrelID
,值设为10
。 -
消费者通过过滤器
myCorrelID=5
连接到brokerA
上的myQueue
。此过滤器与消息的关联 ID 值不匹配。 另一个消费者通过过滤器
myCorrelID=10
连接到brokerB
上的队列myQueue
。此过滤器与消息的关联 ID 值匹配。在这种情况下,虽然
brokerB
上的使用者过滤器与消息匹配,但该消息 不会从brokerA
重新分发给brokerB
,因为brokerA
上存在队列myQueue
的使用者。
在前面的场景中,您可以通过在请求发送到生产者 之前创建 使用者来确保所需的客户端收到消息。该消息会立即路由到消费者,过滤器与消息的关联 ID 匹配。不需要重新分发。
其他资源
- 有关集群负载均衡的更多信息,请参阅 第 16.1.1 节 “代理集群如何平衡消息负载”。