14.4. 启用消息重新发布


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

本节包含有关以下信息:

14.4.1. 了解消息重新发布

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

  • 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 > 元素中,为队列或一组队列设置 redistribution delay。

    在本例中,在最后一个消费者关闭后,负载均衡到 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, 则信息将立即重新分发。但是,您应该在 redistributing 前设置一个延迟 - 消费者通常关闭,但同一队列中需要快速创建另一个。
  4. 对集群中的每个额外代理重复此步骤。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.