为了账号安全,请及时绑定邮箱和手机立即绑定

异步方式发邮件的设计?

异步方式发邮件的设计?

猛跑小猪 2019-03-05 13:15:52
业务逻辑如下:1、创建订单2、发送邮件,提醒相关人员订单创建完成。刚开始,创建订单之后,发送邮件是做成同步的,这样导致一个问题,创建订单这个操作耗时太长,带来的直观效果就是:页面的那个圈圈一直在转,虽然订单创建成功,但是邮件发送失败,由于他们在一个事务中,spring aop配置了如果有失败,就要回滚操作。基于以上事实,所以决定将邮件发送的服务设置为异步的方式。我的设计思路是这样的。1.创建订单。2.利用消息中间件notify,将发送邮件的body放到notify的发布者当中,这个流程就结束了。然后有一个消息的订阅者,消息的订阅者订阅发送方的消息,当订阅到消息之后,将消息通过邮件的方式发送。这样就做成了邮件的异步发送。这种异步的设计,要把消息传到中间件服务器,再从中间件服务器上拿消息,有没有更好的设计方案啊?
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

因为http是一种应答性质的协议,要想实现异步发送邮件,就必须由服务器本身去实现,而不是http本身。

从设计方面,对于服务器资源宽裕的来说,可以用一台服务器专门做邮件服务器,对外公开接口来实现异步发送邮件。
否则,则需要把要发送的邮件和内容存储起来(如数据库,文本文件,redis等),然后通过以下方式来异步发送。
对于windows系列服务器,可以编写服务,利用系统task等简单来实现。
对于linux系列服务器,可以通过corn定时,守护进程等来实现。


查看完整回答
反对 回复 2019-04-22
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

将如一条数据到消息表(包含被发送人,发送状态,发送问题,发送类型),来个任务,定时扫描消息表,查找未发送的消息,发送消息,修改消息表状态


查看完整回答
反对 回复 2019-04-22
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

个人感觉有点太复杂,直接开线程异步调不是就可以吗?


查看完整回答
反对 回复 2019-04-22
  • 3 回答
  • 0 关注
  • 634 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信