搜索

20.6.11. 设置消息过期

download PDF
介绍

如果发送的消息没有在指定时间(毫秒)内递送给消费者,它们可被设置为过期。使用 Java 消息服务(JMS)或 HornetQ Core API,您可以直接在消息上设置过期时间。例如:

// message will expire in 5000ms from now
message.setExpiration(System.currentTimeMillis() + 5000);
JMS MessageProducer 包含了一个 TimeToLive 参数,它控制发送的消息的过期:
// messages sent by this producer will be retained for 5s (5000ms) before expiration           
producer.setTimeToLive(5000);
从过期地址消费的过期消息具有下列属性:
  • _HQ_ORIG_ADDRESS
包含过期消息的原始地址的字符串型属性
  • _HQ_ACTUAL_EXPIRY
包含过期消息的实际过期时间的长整型属性。
配置消息过期地址

消息过期地址是在 JMS 的 address-setting 配置里定义的:

<!-- expired messages in exampleQueue will be sent to the expiry address expiryQueue -->
<address-setting match="jms.queue.exampleQueue">
   <expiry-address>jms.queue.expiryQueue</expiry-address>
</address-setting>
如果消息已过期且没有指定过期地址,消息将从队列里删除并丢弃。
配置 Expiry Reaper 线程

Reaper 线程会定期地检查队列以检验消息是否过期。

  • message-expiry-scan-period
扫描队列以检测过期消息的频率(毫秒为单位,默认是 30000毫秒。-1 表示禁用 Reaper 线程)。
  • message-expiry-thread-priority
Reaper 线程的优先级。它必须是 0 - 9 之间的值,9 表示最高优先级。默认值为 3。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.