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。