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

如何从ActiveMQ Artemis消息中获取当前重试次数?

获取ActiveMQ Artemis Broker端重试的消息投递次数

方案1:利用JMS规范属性JMSXDeliveryCount

JMS规范定义的JMSXDeliveryCount属性由Broker维护,记录消息被投递的总次数(包含首次投递)。在Camel路由中可直接从JMS消息获取该值:

from("jms:queue:yourQueue")
    .process(exchange -> {
        Message jmsMessage = exchange.getIn(JmsMessage.class).getJmsMessage();
        int deliveryCount = jmsMessage.getIntProperty("JMSXDeliveryCount");
        // 首次投递值为1,每次重试递增1
        System.out.println("当前投递次数:" + deliveryCount);
    })
    .to("http://invalid-endpoint");

Qpid JMS客户端会自动映射AMQP协议的delivery-count到JMSXDeliveryCount属性,ActiveMQ Artemis作为AMQP Broker时会正确维护该值,此方案无需额外配置。

方案2:直接读取AMQP原生属性delivery-count

若JMSXDeliveryCount无法正常获取,可直接读取AMQP 1.0规范定义的原生属性:

from("jms:queue:yourQueue")
    .process(exchange -> {
        Message jmsMessage = exchange.getIn(JmsMessage.class).getJmsMessage();
        int deliveryCount = jmsMessage.getIntProperty("delivery-count");
        System.out.println("当前投递次数:" + deliveryCount);
    })
    .to("http://invalid-endpoint");

ActiveMQ Artemis在重试投递时会自动递增该属性值,Qpid JMS客户端可直接访问。

方案3:Broker端配置自定义重试头

若上述方案失效,可通过修改ActiveMQ Artemis的broker.xml,让Broker在重试时注入自定义头:

<address-setting match="yourQueue">
    <redelivery-delay>5000</redelivery-delay>
    <max-redeliveries>3</max-redeliveries>
    <!-- 配置重试时注入自定义头,${redelivery-count}为Broker内置变量 -->
    <redelivery-headers>
        <header name="X-Redelivery-Count" value="${redelivery-count}"/>
    </redelivery-headers>
</address-setting>

之后在Camel路由中读取该自定义头:

from("jms:queue:yourQueue")
    .process(exchange -> {
        Integer redeliveryCount = exchange.getIn().getHeader("X-Redelivery-Count", Integer.class);
        // 首次投递值为0,每次重试递增1
        System.out.println("当前重试次数:" + (redeliveryCount != null ? redeliveryCount : 0));
    })
    .to("http://invalid-endpoint");

此方案通过Broker主动注入头信息,避免了客户端自定义头在重试时丢失的问题。

内容的提问来源于stack exchange,提问作者GND

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:50:26