ActiveMQ Spring JMS:消费消息时如何获取设置的延迟时长?
问题解答
为什么获取不到
ScheduledMessage.AMQ_SCHEDULED_DELAY属性?
ActiveMQ的AMQ_SCHEDULED_DELAY这类调度属性是Broker内部用来控制消息定时投递的控制属性,当消息完成调度并投递到消费者时,Broker不会将这些属性保留在最终的消息对象中,所以消费时无法通过getLongProperty()获取到它。正确的处理方式
如果你业务逻辑需要在消费端获取这条消息的延迟值,你当前使用的自定义属性方案就是最优解:
发送时额外添加自定义属性:jsmTemplate.convertAndSend(destination, message, (var m) -> { m.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay); // 添加自定义属性存储延迟值 m.setLongProperty("messageDelay", delay); return m; });消费时读取自定义属性:
long delay = message.getLongProperty("messageDelay");注意:如果只是需要验证消息延迟是否生效,不需要在消费端获取值的话,可以通过ActiveMQ的管理控制台查看消息的调度记录,但如果业务逻辑依赖这个延迟值,自定义属性是最直接可靠的方式。
内容的提问来源于stack exchange,提问作者crimson589
相关产品推荐
相关产品推荐

