异步实现邮件的发送

198 阅读2分钟

问题描述: 在写接口的时候,遇到一个问题,前端要求先返回结果再去运行其他代码。

问题分析: 因为一些特殊原因,本次使用的是网易发送邮件,也就是用你的账号给其他人发送邮件这种,这也存在一些问题,就是不能在短时间内大量发送邮件信息,于是我加了一个定时器。

    限制为每半分钟发送一次,后台在接收到前端发送的数组时,数组中的数据每过半分钟才能执行一条,也就是发送给好几个人的邮件,过了半分钟才能给下一个人发送邮件这种情况。

    于是这就产生了一个问题,需要等这些定时器都执行完毕才能获取到接口返回的结果。

    而且这样也会造成阻塞等待,比较耗时。

问题解决: 加入异步成功解决,即为主进程直接返回一个结果,另一个进程则去执行那个比较耗时的。

具体实现

    1.在启动类上加上注解@EnableAsync。

    2.在service层的方法上加上@Async 注解。

    3.在controller层正常调用此方法就行。

分析总结

  •     @Async 注解可以添加到类上,表示该类里面的所有方法都是异步执行,也可以添加到方法上,表示该方法异步执行。
    
  •     平时异步用的少一点,现在用过之后才发现,还挺不错。
    
  •     异步应用场景:         当一个应用程序,如:去网上拿一个数据,需要等待很久,此时我们就可以加入一个异步方法,使拿到数据后,异步去运行指定方法使程序提速。