SpringBoot集成RabbitMQ实现消息队列异步处理

本文介绍了如何使用SpringBoot集成RabbitMQ进行消息队列的异步处理,以用户注册场景为例,展示了消息队列在发邮件、发短信等操作中的应用。文章详细讲解了集成过程,包括添加依赖、配置队列,以及创建发送和接收消息的消费者。
摘要由CSDN通过智能技术生成

一、应用场景

用户注册一般需要通过用户信息

  1. 发邮件
  2. 发短信

正常流程

通过消息队列异步处理

二、消息队列集成配置

pom.xml 添加依赖包

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-amqp</artifactId>
 </dependency> 
</
Spring Boot 集成 RabbitMQ 并启用消息确认 (Confirm) 和异步回调,可以提供可靠的消息传递保证。首先你需要在项目中添加RabbitMQ的依赖,并配置连接和交换机。 1. 添加依赖: 在 `pom.xml` 或者 `build.gradle` 文件中添加 Spring AMQP 的依赖: ```xml <!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!-- Gradle --> implementation 'org.springframework.boot:spring-boot-starter-amqp' ``` 2. 配置 rabbitmq: 在 application.properties 或 application.yml 中,设置 RabbitMQ 的连接信息: ```properties spring.rabbitmq: host: localhost # RabbitMQ服务器地址 port: 5672 username: guest # 默认用户名 password: guest # 默认密码 virtual-host: / # 虚拟主机名(默认值) ``` 3. 创建消费者并开启消息确认: 在消费者组件上启用 `@RabbitListener` 注解,并通过 `confirmMode="MANUAL"` 开启手动确认模式: ```java import org.springframework.amqp.annotation.*; @RabbitListener(queues = "${queue.name}", confirmMode = "MANUAL") public void consumeMessage(String message, Acknowledgment acknowledgment) throws Exception { // 消费逻辑 System.out.println("Received message: " + message); // 当消费完毕,调用acknowledge方法确认收到消息 if (message.equals("complete")) { acknowledgment.ack(); } else { // 如果需要拒绝消息,调用 nack 方法,传入原因(可选) acknowledgment.nack(true, true); // 第二个true表示重新发布到队列 } } ``` 4. 异步回调(可选): RabbitMQ 自带的确认机制不是异步的,如果需要异步处理确认,通常会在监听器外部处理。例如,你可以在单独的类或方法中处理 `Acknowledgment` 对象: ```java public class ConfirmationHandler implements RabbitListenerContainerAware { private final RabbitTemplate rabbitTemplate; @Autowired public ConfirmationHandler(RabbitTemplate rabbitTemplate) { this.rabbitTemplate = rabbitTemplate; } @Override public void configureMessageListener(Channel channel, Consumer consumer) { consumer.setMessageRejector(new RejectedMessageListenerAdapter(this::onReject)); consumer.setAcknowledgeMode(AcknowledgeMode.CLIENT_ACKNOWLEDGE); } // 当接收到 nack 时,可以异步处理 public void onReject(MessageProperties props, byte[] body, String rejectionCode, String rejectionReason) { // 在这里处理拒绝操作,如记录日志或者发送错误通知 } // 其他监听器接口方法... } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南归北隐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值