4.12. 将过期的消息移到到期地址


对于最后一个值队列以外的队列,如果您只有一个非破坏性消费者,代理永远不会从队列中删除消息,从而导致队列大小随着时间增大。为防止这种队列大小不受约束的增长,您可以配置消息过期的时间并指定代理向其移动过期消息的地址。

4.12.1. 配置消息过期

以下流程演示了如何配置消息到期。

流程

  1. 打开 <broker_instance_dir>/etc/broker.xml 配置文件。
  2. core 元素中,设置 message-expiry-scan-period,以指定代理扫描过期消息的频率。

    <configuration ...>
       <core ...>
          ...
          <message-expiry-scan-period>1000</message-expiry-scan-period>
          ...

    根据上述配置,代理每隔 1000 毫秒扫描过期的消息队列。

  3. 在匹配地址的 address-setting 元素 ,指定到期地址。另外,设置消息过期时间。例如:

    <configuration ...>
       <core ...>
          ...
          <address-settings>
             ...
             <address-setting match="stocks">
                ...
                <expiry-address>ExpiryAddress</expiry-address>
                <expiry-delay>10</expiry-delay>
                ...
             </address-setting>
             ...
          <address-settings>
    <configuration ...>
    expiry-address
    匹配地址的到期地址。在前面的示例中,代理会向名为 ExpiryAddress 到期地址发送过期的消息。
    expiry-delay

    代理应用到 使用默认 过期时间的消息,以毫秒为单位。默认情况下,消息的过期时间为 0,即它们不会过期。对于过期时间大于默认的消息,expiration -delay 无效。

    例如,假设您将地址上的 expiration-delay 设置为 10,如上例中所示。如果默认过期时间为 0 的消息在此地址到达队列,代理会将消息的过期时间从 0 更改为 10。但是,如果另一条消息使用过期时间 20 到达,则其过期时间保持不变。如果将 expiration-delay 设置为 -1,则此功能被禁用。默认情况下,expiry-delay 设置为 -1

  4. 另外,您可以指定最小和最大 到期延迟值,而不是为 expiration-delay 指定值。例如:

    <configuration ...>
       <core ...>
          ...
          <address-settings>
             ...
             <address-setting match="stocks">
                ...
                <expiry-address>ExpiryAddress</expiry-address>
                <min-expiry-delay>10</min-expiry-delay>
                <max-expiry-delay>100</max-expiry-delay>
                ...
             </address-setting>
             ...
          <address-settings>
    <configuration ...>
    min-expiry-delay
    代理应用到消息的最短过期时间,以毫秒为单位。
    max-expiry-delay

    代理应用到消息的最大过期时间,以毫秒为单位。

    代理应用 min-expiry-delay 和 max- expiry-delay 的值,如下所示:

    • 对于默认过期时间为 0 的消息,代理会将过期时间设置为 max-expiry-delay 的指定值。如果您还没有为 max-expiry-delay 指定值,代理会将过期时间设置为 min-expiry-delay 的指定值。如果您没有为 min-expiry-delay 指定值,代理不会更改消息的过期时间。
    • 对于过期时间超过 max-expiry-delay 的消息,代理会将过期时间设置为 max-expiry-delay 的指定值。
    • 对于过期时间低于 min-expiry-delay 的消息,代理会将过期时间设置为 min-expiry-delay 的指定值。
    • 对于在 min-expiry-delay 和 max-expiry-delay 之间带有 expiration 的消息, 代理不会更改消息的过期时间。
    • 如果您为 expiry-delay 指定一个值(即默认值 -1以外的值),这将覆盖您为 min-expiry-delay 和 max-expir y-delay 指定的任何值。
    • min-expiry-delay 和 max- expiry-delay 的默认值都是 -1 (即禁用)。
  5. 在 配置文件的 address 元素中,配置之前为 expiration -address 指定 的地址。在此地址上定义队列.例如:

    <addresses>
        ...
        <address name="ExpiryAddress">
            <anycast>
                <queue name="ExpiryQueue"/>
            </anycast>
        </address>
        ...
    </addresses>

    以上示例配置将到期队列 ExpiryQueue 与到期地址 ExpiryAddress 关联。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.