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

RabbitMQ消费异常:首条消息后停止消费且消息重复

问题分析与解决方案

问题根源

出现重复消费、消费线程终止并抛出java.lang.NoClassDefFoundError的核心原因是依赖版本冲突:

  • 项目使用Spring Boot 2.2.4.RELEASE作为父依赖,该版本对应的Spring框架版本是5.2.3.RELEASE,spring-boot-starter-amqp已经间接引入了适配版本的spring-messaging。
  • 但手动添加了spring-messaging 4.2.4.RELEASE,这个版本远低于Spring Boot 2.2.4要求的版本,其中并不包含org.springframework.messaging.handler.invocation.MethodArgumentResolutionException类,导致消费线程处理异常时无法找到该类,进而线程终止。
  • 线程异常终止后,消息未被正确确认,RabbitMQ会将消息重新放回队列,导致重复消费;同时消费者容器因线程中止停止,无法处理后续消息。

解决方案

  1. 移除手动指定的低版本spring-messaging依赖
    直接删除pom.xml中这段配置:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-messaging</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    

    spring-boot-starter-amqp已经包含了适配当前Spring Boot版本的spring-messaging,无需手动引入。

  2. 强制更新依赖并清理缓存
    执行Maven命令清理并重新加载依赖:

    mvn clean install -U
    
  3. 验证消息确认机制(可选)
    如果依赖修复后仍有重复消费问题,检查消息监听的确认配置:

    • 使用@RabbitListener时默认是自动确认模式,确保消费逻辑没有抛出未捕获的异常(异常会导致自动确认失效,消息重回队列)。
    • 若使用手动确认模式,确保消费成功后调用channel.basicAck()确认消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:52:26