You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:54:52