Show Table of Contents
20.6.11. 设置消息过期
介绍
如果发送的消息没有在指定时间(毫秒)内递送给消费者,它们可被设置为过期。使用 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。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.