Spring Boot整合RabbitMQ极简教程

一、消息队列能解决什么问题?

  • 异步处理:解耦耗时操作(如发短信、日志记录)
  • 流量削峰:应对突发请求,避免系统过载
  • 应用解耦:服务间通过消息通信,降低依赖

二、快速整合RabbitMQ

1. 环境准备
  • 安装RabbitMQ(推荐Docker一键部署):

    bash 复制代码
    docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management  
  • 访问管理界面:http://localhost:15672(账号/密码:guest/guest)

2. Spring Boot项目配置

① 添加依赖

xml 复制代码
<!-- pom.xml -->  
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-amqp</artifactId>  
</dependency>  

② 配置连接信息

yaml 复制代码
# application.yml  
spring:  
  rabbitmq:  
    host: localhost  
    port: 5672  
    username: guest  
    password: guest  
    virtual-host: /  

三、核心代码实现

1. 生产者(发送消息)
java 复制代码
@Component  
public class MsgProducer {  

    @Autowired  
    private AmqpTemplate amqpTemplate;  

    // 发送到指定队列  
    public void send(String message) {  
        amqpTemplate.convertAndSend("demo_queue", message);  
        System.out.println("消息已发送: " + message);  
    }  
}  
2. 消费者(接收消息)
java 复制代码
@Component  
public class MsgConsumer {  

    // 监听指定队列  
    @RabbitListener(queues = "demo_queue")  
    public void handle(String message) {  
        System.out.println("收到消息: " + message);  
    }  
}  
3. 自动创建队列(可选)
java 复制代码
@Configuration  
public class RabbitConfig {  

    // 声明队列(若不存在则自动创建)  
    @Bean  
    public Queue demoQueue() {  
        return new Queue("demo_queue");  
    }  
}  

四、测试消息收发

java 复制代码
@SpringBootTest  
class DemoApplicationTests {  

    @Autowired  
    private MsgProducer msgProducer;  

    @Test  
    void testSend() {  
        msgProducer.send("Hello RabbitMQ!");  
    }  
}  

控制台输出

复制代码
消息已发送: Hello RabbitMQ!  
收到消息: Hello RabbitMQ!  

五、扩展:常用注解与配置

注解/配置 说明
@RabbitListener 监听队列或交换机消息
@RabbitHandler 处理消息的方法注解
@Exchange + @Binding 声明交换机与队列绑定关系
spring.rabbitmq.listener.simple.retry.enabled=true 启用消费失败重试

六、常见问题

  1. 消息未消费

    • 检查队列名是否一致
    • 消费者是否添加了@Component注解
    • 确认RabbitMQ服务是否正常运行
  2. 连接失败

    • 检查application.yml中的host、port、账号密码
    • 防火墙是否开放5672端口
  3. 消息重复消费

    • 启用消费者幂等处理
    • 使用@RabbitListener(id = "唯一ID")

七、其他MQ整合(简要)

MQ类型 依赖配置 核心注解
Kafka spring-kafka @KafkaListener
RocketMQ rocketmq-spring-boot-starter @RocketMQMessageListener

八、总结

通过Spring Boot整合RabbitMQ只需三步:

  1. 加依赖spring-boot-starter-amqp
  2. 配连接application.yml中设置RabbitMQ地址
  3. 用注解@RabbitListener实现消息监听

官方文档Spring AMQP Reference

相关推荐
彭于晏Yan2 小时前
MQTT消息服务
spring boot·后端·中间件
indexsunny2 小时前
互联网大厂Java面试实战:从Spring Boot到微服务架构的深度解析
java·spring boot·spring cloud·kafka·prometheus·security·microservices
java1234_小锋2 小时前
分享一套优质的SpringBoot+Vue咖啡商城系统
vue.js·spring boot·咖啡商城
悟空码字4 小时前
滑块拼图验证:SpringBoot完整实现+轨迹验证+Redis分布式方案
java·spring boot·后端
小江的记录本5 小时前
【MyBatis-Plus】Spring Boot + MyBatis-Plus 进行各种数据库操作(附完整 CRUD 项目代码示例)
java·前端·数据库·spring boot·后端·sql·mybatis
码界奇点5 小时前
基于Spring Boot的医院药品管理系统设计与实现
java·spring boot·后端·车载系统·毕业设计·源代码管理
海南java第二人6 小时前
Cursor 高级实战:从 Spring Boot 到微服务,AI 驱动的全流程开发指南
人工智能·spring boot·微服务
爱笑的源码基地6 小时前
门诊his系统源码,中西医结合的数字化门诊解决方案
java·spring boot·源码·二次开发·门诊系统·云诊所系统·诊所软件源码
小江的记录本7 小时前
【MyBatis-Plus】MyBatis-Plus的核心特性、条件构造器、分页插件、乐观锁插件
java·前端·spring boot·后端·sql·tomcat·mybatis
驕傲的兎孒7 小时前
基于 SpringBoot + Vue3 + AI 打造企业级售后服务支持平台 | 实战方案分享
人工智能·spring boot·后端