Apache ActiveMQ Artemis消息丢失场景下journal记录分析咨询
现有journal条目可推断的信息
你提供的第一条journal记录已经确认你关注的recordID=1094612593的消息已经成功写入broker的持久化日志:
- 消息为持久化类型,无过期时间,写入事务ID为
1094612560,投递目标地址为===myQueue===,用户自定义消息ID为aa844c3f-1c6e-11ec-840c-005056be4b8b,写入时间为2021年9月23日16:03:37(EEST时区)
你后续提供的三条journal记录对应的recordID=1094612663和你关注的丢失消息不是同一条,这三条记录仅能说明另一条消息已经完成了添加队列引用→消费者确认ACK→日志删除的完整生命周期,和本次消息丢失事件无直接关联。
后续排查方向
你可以按照如下步骤推进排查:
- 检索全部journal记录中所有包含
recordID=1094612593的条目,确认这条消息后续是否存在AddRef(添加队列引用)、ACK(消费者确认)、DeleteRecord(日志删除)、事务回滚、消息过期、移入死信队列的相关操作记录 - 核查写入事务
txID=1094612560的最终状态:如果该事务最终没有提交,这条消息不会被投递给消费者,会被broker自动清理 - 确认地址
===myQueue===对应的队列ID是否为7,排查是否存在路由规则配置错误,导致消息被转发到其他地址/队列,而非你预期的消费队列 - 检查消费端配置:是否开启了自动ACK,若消费端收到消息后业务处理异常但无重试逻辑,会出现消息未正常处理但已向broker发送ACK,消息被broker删除的情况
- 核查broker死信队列配置:如果消费重试次数超过配置上限,消息会被移入死信队列,你可以直接检索死信队列中是否存在用户消息ID为
aa844c3f-1c6e-11ec-840c-005056be4b8b的记录 - 排查broker的地址/队列权限配置、消息过滤规则,确认是否存在消息被拦截的情况
内容的提问来源于stack exchange,提问作者miroana
相关产品推荐
相关产品推荐

