14.4. 启用消息重新发布


如果您的代理集群配置了 message-load-balancing 设置为 ON_DEMANDOFF_WITH_REDISTRIBUTION,您可以配置消息 重新发布 以防止消息在没有使用消息的队列中"stuck"。

本节包含有关以下内容的信息:

14.4.1. 了解重新发布消息

代理集群使用负载均衡来在集群中分发消息负载。在集群连接中配置负载均衡时,您可以使用以下 message-load-balancing 设置启用重新发布:

  • ON_DEMAND - 启用负载平衡并允许重新发布
  • OFF_WITH_REDISTRIBUTION - 禁用负载均衡,但允许重新发布

在这两种情况下,代理仅将消息转发到具有匹配消费者的其他代理。此行为可确保消息不会移到没有任何消费者使用消息的队列。但是,如果在消息转发到代理后连接到队列的消费者,这些消息就会在队列中变为"stuck",且没有消耗。这个问题有时被称为 starvation

通过自动重新分发消息,从没有消费者到具有匹配消费者的集群中代理的队列中,消息重新发布可防止星号。

使用 OFF_WITH_REDISTRIBUTION 时,代理仅将消息转发到具有有效本地消费者的其他代理,允许您在消费者不可用时优先选择代理。

消息重新发布支持使用过滤器(也称为 选择器),即,当消息与可用本地消费者的选择器不匹配时会被重新分发。

其他资源

14.4.2. 配置消息重新发布

此流程演示了如何通过负载平衡配置消息重新发布。如果您希望在没有负载均衡的情况下重新发布消息,请将 &lt ;message-load-balancing& gt; 设置为 OFF_WITH_REDISTRIBUTION

流程

  1. 打开 & lt;broker_instance_dir> /etc/broker.xml 配置文件。
  2. 在 & lt;cluster-connection& gt; 元素中,验证 <message-load-balancing > 是否已设置为 ON_DEMAND

    <configuration>
        <core>
            ...
            <cluster-connections>
                <cluster-connection name="my-cluster">
                    ...
                    <message-load-balancing>ON_DEMAND</message-load-balancing>
                    ...
                </cluster-connection>
            </cluster-connections>
        </core>
    </configuration>
  3. 在 &lt ;address-settings > 元素中,为队列或一组队列设置重新分配延迟。

    在本例中,负载均衡到 my.queue 的消息会在最后一个消费者关闭后重新分发 5000 毫秒。

    <configuration>
        <core>
            ...
            <address-settings>
                <address-setting match="my.queue">
                    <redistribution-delay>5000</redistribution-delay>
                </address-setting>
            </address-settings>
            ...
        </core>
    </configuration>
    address-setting
    match 属性设置为您希望重新分发消息的队列的名称。您可以使用代理通配符语法来指定队列范围。更多信息请参阅 第 4.2 节 “将地址设置应用到一组地址”
    redistribution-delay
    代理在此队列的最终消费者关闭后应等待的时间(以毫秒为单位),然后再将消息重新分发到集群中的其他代理。如果将其设置为 0, 则信息将立即重新分发。但是,您应该在重新分发前设置延迟 - 消费者通常会关闭,但在同一个队列中快速创建另一个延迟。
  4. 对集群中的每个额外代理重复此步骤。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.