Spring Boot + RabbitMQ发送邮件(保证消息 100% 投递成功并被消费)

本文介绍了使用Spring Boot和RabbitMQ实现邮件发送,包括消息发送确认、消费确认、重试机制和消费幂等性验证。通过配置和代码示例展示了如何确保邮件100%投递成功并被幂等消费,同时提供了异常情况的测试和解决方案。
摘要由CSDN通过智能技术生成

一、先扔一张图

说明:

本文涵盖了关于RabbitMQ很多方面的知识点, 如:

  • 消息发送确认机制

  • 消费确认机制

  • 消息的重新投递

  • 消费幂等性, 等等

这些都是围绕上面那张整体流程图展开的, 所以有必要先贴出来, 见图知意

二、实现思路

  • 简略介绍163邮箱授权码的获取

  • 编写发送邮件工具类

  • 编写RabbitMQ配置文件

  • 生产者发起调用

  • 消费者发送邮件

  • 定时任务定时拉取投递失败的消息, 重新投递

  • 各种异常情况的测试验证

  • 拓展: 使用动态代理实现消费端幂等性验证和消息确认(ack)

三、项目介绍

  • Spring Boot版本2.1.5.RELEASE, 旧版本可能有些配置属性不能使用, 需要以代码形式进行配置

  • RabbitMQ版本3.7.15

  • MailUtil: 发送邮件工具类

  • RabbitConfig: rabbitmq相关配置

  • TestServiceImpl: 生产者, 发送消息

  • MailConsumer: 消费者, 消费消息, 发送邮件

  • ResendMsg: 定时任务, 重新投递发送失败的消息

说明: 上面是核心代码, MsgLogService mapper xml等均未贴出, 完整代码可以参考我的GitHub, 欢迎fork, https://github.com/wangzaiplus/springboot/tree/wxw

四、代码实现

163邮箱授权码的获取, 如图:

该授权码就是配置文件spring.mail.password需要的密码

2. pom

 

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
  </dependency>
        
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

 

3. rabbitmq、邮箱配置

 

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

spring.rabbitmq.publisher-confirms=true

spring.rabbitmq.publisher-returns=true

spring.rabbitmq.listener.simple.acknowledge-mode=manual
spring.rabbitmq.listener.simple.prefetch=100


spring.mail.host=smtp.163.com
spring.mail.username=18621142249@163.com
spring.mail.password=123456wangzai
spring.mail.from=18621142249@163.com
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

说明: password即授权码, usernamefrom要一致

4. 表结构

 

CREATE TABLE `msg_log` (
  `msg_id` varchar(255) NOT NULL DEFAULT '' COMMENT '消息唯一标识',
  `msg` text COMMENT '消息体, json格式化',
  `exchange` varchar(255) NOT NULL DEFAULT '' COMMENT '交换机&

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值