Java面试题更新 2026-08-03

请描述在 Spring Boot 项目中集成 RabbitMQ 时,消息发送和处理(消费)的完整流程。包括如何配置连接、如何发送消息到交换机或队列、如何声明队列和交换机、以及如何接收和处理消息。

考察说明

考查候选人对 Spring Boot 集成 RabbitMQ 的实践理解,包括消息发布、消费配置、以及常见问题的处理。

回答思路

  1. 【回答框架 1】在 Spring Boot 项目中集成 RabbitMQ 通常通过 spring-boot-starter-amqp 依赖实现,该依赖自动配置了 ConnectionFactory、RabbitTemplate 和监听容器。
  2. 【回答框架 2】消息发送使用 RabbitTemplate 的 convertAndSend 方法,可以指定交换机、路由键和消息体;也可以不指定交换机而使用默认交换机直接发送到队列(此时路由键为队列名)。
  3. 【回答框架 3】消息消费可以通过 @RabbitListener 注解标注在方法上,注解中指定队列名称,Spring 会自动创建监听容器并调用该方法处理消息。需确保监听方法所在的类被 Spring 管理。
  4. 【回答框架 4】队列和交换机的声明可以使用 @Bean 定义 Queue、TopicExchange、FanoutExchange 等,并通过 Binding 绑定它们;也可以使用 @RabbitListener 的 bindings 属性声明。
  5. 【回答框架 5】在项目中还需配置连接参数,如 host、port、username、password、virtual-host,这些可以通过 application.properties 或 application.yml 进行设置,默认连接本地 RabbitMQ。
  6. 【关键点 1】使用 spring-boot-starter-amqp 自动配置 RabbitTemplate 和监听容器。
  7. 【关键点 2】RabbitTemplate.convertAndSend 用于发送消息,支持交换机和路由键。
  8. 【关键点 3】@RabbitListener 注解监听队列,方法需标记 @RabbitHandler 或为普通方法。
  9. 【关键点 4】声明队列和交换机可通过 @Bean 结合 QueueBinding 实现。
  10. 【关键点 5】连接参数通过配置属性设置,如 spring.rabbitmq.host 等。
  11. 【易错点 1】消息发送后未确认可能因事务回调未配置导致丢失,应设置 Mandatory 或 Publisher Confirms。
  12. 【易错点 2】队列、交换机、绑定声明不完整会导致发送或消费时资源不存在,需确保三者正确关联。
  13. 【易错点 3】监听方法若抛出异常,消息会重试或进入死信,需合理配置重试策略和死信队列。