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> ...<configuration ...> <core ...> ... <message-expiry-scan-period>1000</message-expiry-scan-period> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据上述配置,代理每隔 1000 毫秒扫描过期的消息队列。
在匹配地址的
address-setting元素 中,指定到期地址。另外,设置消息过期时间。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow expiry-address-
匹配地址的到期地址。在前面的示例中,代理会向名为
ExpiryAddress的到期地址发送过期的消息。 expiry-delay代理应用到 使用默认 过期时间的消息,以毫秒为单位。默认情况下,消息的过期时间为
0,即它们不会过期。对于过期时间大于默认的消息,expiration-delay无效。例如,假设您将地址上的
expiration-delay设置为10,如上例中所示。如果默认过期时间为0的消息在此地址到达队列,代理会将消息的过期时间从0 更改为10。但是,如果另一条消息使用过期时间20到达,则其过期时间保持不变。如果将 expiration-delay 设置为-1,则此功能被禁用。默认情况下,expiry-delay设置为-1。
另外,您可以指定最小和最大
到期延迟值,而不是为 expiration-delay指定值。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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-expiry-delay -
min-expiry-delay 和的默认值都是max-expiry-delay-1(即禁用)。
-
对于默认过期时间为
在 配置文件的 address 元素中,配置之前为 expiration
-address指定的地址。在此地址上定义队列.例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上示例配置将到期队列
ExpiryQueue与到期地址ExpiryAddress关联。