4.12. 将过期的信息移到到期地址
对于最后一个值队列以外的队列,如果您只有非破坏性消费者,代理永远不会从队列中删除信息,从而导致队列大小随着时间增大。要防止这种队列大小不受限制增长,您可以配置当消息过期并指定代理将过期信息的地址。
4.12.1. 配置消息到期
以下流程演示了如何配置消息到期。
步骤
-
打开
<broker-instance-dir>/etc/broker.xml
配置文件。 在
core
元素中,设置message-expiry-scan-period
以指定代理扫描过期消息的频率。<configuration ...> <core ...> ... <message-expiry-scan-period>1000</message-expiry-scan-period> ...
根据前面的配置,代理扫描队列每 1000 毫秒的过期消息。
在匹配地址 或一组 地址的
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,
表示它们不会过期。对于超过默认值的过期时间的信息,expiry-delay
无效。例如,假设您将地址上的
expiry-delay
设置为10
,如上例中所示。如果默认过期时间为0
的消息在此地址到达队列,则代理会将消息的过期时间从0
改为10
。但是,如果另一个正在使用到期时间20
次的消息,则其过期时间保持不变。如果将 expiry-delay 设置为-1
,则禁用此功能。默认情况下,expiry-delay
设置为-1
。
另外,您可以指定最小和最大到期延迟值,而不是为
expiry-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
值超过 expiration 时间的消息,代理会将过期时间设置为max-expiry-delay
的指定的值。 -
对于在
min-expiry-delay
值低于 expiration 时间的消息,代理会将过期时间设置为min-expiry-delay
的指定的值。 -
对于在
min-expiry-delay
和max-expiry-delay
之间过期的消息,代理不会更改消息的过期时间。 -
如果您为
expiry-delay
(即默认值 -1)指定了一个值,这将覆盖您为min-expiry-delay
和max-expiry-delay
指定的任何值。 -
min-expiry-delay
和max-expiry-delay
的默认值为 -1(即 disabled)。
-
对于默认过期时间的消息为
在配置文件的
addresses
元素中,配置之前为到期
地址指定的地址。在此地址上定义一个队列。例如:<addresses> ... <address name="ExpiryAddress"> <anycast> <queue name="ExpiryQueue"/> </anycast> </address> ... </addresses>
前面的示例配置将到期队列
ExpiryQueue
与到期地址ExpiryAddress
关联。