前言:
发送邮件,肯定是每个公司都会有的基本业务。很多公司都会选择把发送邮件作为一个基础服务,对外提供接口。直接调用就可发邮件了。但是我们都知道发送邮件耗时都比较长。那么今天就介绍下使用Spring boot+eventbus来打造一个简单邮件服务
规划接口列表
发送邮件的类型准备的有三种
- 发送普通邮件
- 发送html邮件
- 发送图文邮件
还有一个细节,如果我们同步的取发送邮件会有两个问题。
- 接口响应时间比较长
- 遇到并发的情况,容易导致服务器压力过大或者邮箱服务封ip
所以我们准备使用队列来执行发送邮件的操作。可以解决这个问题。队列我选用的是Google的eventbus。是一款很轻量的队列。直接走的内存
准备工作
首先要在pom.xml中引入 需要使用的包
1 | 复制代码 <dependency> |
- spring-boot-starter-mail :spring-boot提供的发邮件的maven库
- guava:google提供的开源库。里面包含来很多工具
- lombok:可以帮你省去编写实体类的工具
引入之后,我们还需要配置发送邮件所需要的必要配置
在application.properties中配置邮箱
1 | 复制代码spring.mail.host=smtp.mail.me.com //邮箱发送服务器 |
做到这里其实就已经完成了,发邮件所需要的配置了。但是我们是要用队列来发送,所以还需要配置下队列
1 | 复制代码@Configuration |
封装EmailService
准备好了之后,就可以直接来封装发送邮件的业务了。之前有提到我们需要三个接口,同样的,我们也需要三个service方法
1 | 复制代码@Service |
队列监听
既然封装好了方法,那么就需要调用。调用的方式,其实就是将接口传来的数据传到队列里。队列的消费者接收到了消息就将消息拿来调用发送邮件的方法
我们首先创建一个消费类,用来接受消息,处理消息。
1 | 复制代码@Service |
其实eventbus抛消息都是使用的post方法来抛消息。走到不同的方法里面是利用了类的多态,抛入不同的实体类就可以进行区分了。走进了不同的方法,就调用相应Service方法。
控制器与测试
控制器部分,没什么好说的,我就贴出图文的代码。其余代码可以在我的github上面看
先看眼实体类
1 | 复制代码@Data |
1 | 复制代码 /** |
图文要稍微特殊一点,需要拼接下正文内容。然后将实体类中的content替换。最后将实体类抛入队列。直接返回接口请求。队列那边就会排着队搞定所有的邮件
下面来做个测试
请求很迅速的返回了结果
然后去邮箱中查看结果
好了今天对邮件服务的介绍就写到这里。知识点并不深奥,主要介绍一个思路。如有不对的地方,请大神指出。谢谢
本文转载自: 掘金