没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Spring Boot + RabbitMQ发生邮件(保证消息 100% 投递成功并被消费)
一、先扔一张图
说明:
本文涵盖了关于RabbitMQ很多方面的知识点, 如:
消息发生确认机制
消费确认机制
消息的重新投递
消费幂等性, 等
等
这些都是围绕上面那张整体流程图展开的, 所以有必要先贴出来, 见图知意
二、实现思路
简略介绍163邮箱授权码的获取
编写发生邮件工具类
编写RabbitMQ配置文件
生产者发起调用
消费者发生邮件
定时任务定时拉取投递失败的消息, 重新投递
各种异常情况的测试验证
拓展: 使用动态代理实现消费端幂等性验证和消息确认(ack)
三、项目介绍
Spring Boot版本2.1.5.RELEASE, 旧版本可能有些配置属性不能使用, 需要以代码形式进行配置
RabbitMQ版本3.7.15
MailUtil: 发生邮件工具类
<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>
RabbitConfig: rabbitmq相关配置
TestServiceImpl: 生产者, 发生消息
MailConsumer: 消费者, 消费消息, 发生邮件
ResendMsg: 定时任务, 重新投递发生失败的消息
说明: 上面是核心代码, MsgLogService mapper xml等均未贴出, 完整代码可以参考我的GitHub, 欢迎fork,
https://github.com/wangzaiplus/springboot/tree/wxw
四、代码实现
163邮箱授权码的获取, 如图:
该授权码就是配置文件spring.mail.password需要的密码
2.
pom
3.
rabbitmq、邮箱配置
CREATE TABLE `msg_log` (
`msg_id` varchar(255) NOT NULL DEFAULT '' COMMENT '消息唯�标识',
`msg` text COMMENT '消息体, json格式化',
`exchange` varchar(255) NOT NULL DEFAULT '' COMMENT '交换机',
`routing_key` varchar(255) NOT NULL DEFAULT '' COMMENT '路由键',
`status` int(11) NOT NULL DEFAULT '0' COMMENT '状态: 0投递中 1投递成功 2投递失败 3已消费',
`try_count` int(11) NOT NULL DEFAULT '0' COMMENT '重试次数',
`next_try_time` datetime DEFAULT
NULL COMMENT
'下�次重试时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY
(`msg_id`),
UNIQUE KEY `unq_msg_id` (`msg_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息投递�志';
说 明 : password即授 权 码, username和from要一致
4.
表结构
说明: exchange routing_key字段是在定时任务重新投递消息时需要用到的
5.
MailUtil
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
剩余14页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1900
- 资源: 3864
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功