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

如何通过操作API获取ActiveMQ Artemis定时消息的当前重发次数?

获取ActiveMQ Artemis定时重发消息的投递次数

针对你使用ActiveMQ Artemis 2.20遇到的定时消息堆积排查需求,以下几种方式可以获取消息的重发尝试次数:

1. 通过Core API直接获取消息属性

在客户端代码中,当消费或访问消息时,调用Artemis Core API中Message对象的getDeliveryCount()方法,该方法会返回消息自发送以来的累计投递次数(包含所有重发尝试)。对于处于调度队列中等待重发的消息,只要能通过Core API获取到消息实例,就能读取该值。

2. 利用管理API(JMX/REST)查询

JMX方式

通过JMX连接到Artemis服务器,找到对应队列的QueueControl MBean:

  • 调用showMessage(String messageId)方法,传入目标定时消息的ID,返回结果中包含deliveryCount属性,即为该消息的重发尝试次数。
  • 若需批量查询,调用listMessages(String filter)方法,配合筛选条件(如消息状态为调度中),返回的消息详情里同样包含deliveryCount字段。

REST管理API

若启用了Artemis的REST管理端点,可发送请求到类似/management/queues/{queueName}/messages/{messageId}的路径,响应结果中会包含deliveryCount属性。

3. 自定义拦截器追踪投递次数

如果原生API无法满足定制化需求,可通过Artemis拦截器机制实现:

  • 实现PostOfficeInterceptor,在消息重发的拦截逻辑中,自定义一个消息属性(如custom_delivery_count),每次重发时递增该属性值。
  • 后续通过Core API或管理API读取这个自定义属性,即可追踪重发次数。

注意:2.20版本中listScheduledMessages()默认输出确实不包含投递次数,但通过showMessage()或直接访问消息实例的方式可以获取到该关键信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:03:10