TIBCO-EMS:如何基于JMS消息头设置消息投递延迟
关于TIBCO EMS是否支持单条消息自定义投递延迟的解答
是的,TIBCO EMS完全支持通过消息头属性为单条消息设置差异化的投递延迟,实现效果和ActiveMQ的AMQ_SCHEDULED_DELAY特性一致。
实现方式
TIBCO EMS提供了标准的JMS自定义消息属性JMS_TIBCO_DELIVERY_DELAY,参数值为long类型,单位为毫秒,用于指定消息发送到EMS服务端后,需要延迟多久才投递给消费者。
代码示例
对应你给出的ActiveMQ实现逻辑,TIBCO EMS的实现代码如下:
MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage("test msg"); if (condition) { // 延迟60秒投递,单位为毫秒 long delayTime = 60 * 1000; message.setLongProperty("JMS_TIBCO_DELIVERY_DELAY", delayTime); } producer.send(message);
注意事项
- 该特性仅在TIBCO EMS 8.4及以上版本支持,低版本EMS如需实现类似效果,需要通过「消息过期 + 死信队列转发」的迂回方案实现
- 延迟计时从EMS服务端收到消息的时间开始计算,而非生产者构造消息的时间
- 单条消息设置的
JMS_TIBCO_DELIVERY_DELAY优先级高于队列/主题层面配置的统一投递延迟参数 - 延迟未到期的消息会暂存在EMS服务端存储中,不会被消费者提前拉取到
内容的提问来源于stack exchange,提问作者Jesus Zavarce
相关产品推荐
相关产品推荐

