业务逻辑如下:1、创建订单2、发送邮件,提醒相关人员订单创建完成。刚开始,创建订单之后,发送邮件是做成同步的,这样导致一个问题,创建订单这个操作耗时太长,带来的直观效果就是:页面的那个圈圈一直在转,虽然订单创建成功,但是邮件发送失败,由于他们在一个事务中,spring aop配置了如果有失败,就要回滚操作。基于以上事实,所以决定将邮件发送的服务设置为异步的方式。我的设计思路是这样的。1.创建订单。2.利用消息中间件notify,将发送邮件的body放到notify的发布者当中,这个流程就结束了。然后有一个消息的订阅者,消息的订阅者订阅发送方的消息,当订阅到消息之后,将消息通过邮件的方式发送。这样就做成了邮件的异步发送。这种异步的设计,要把消息传到中间件服务器,再从中间件服务器上拿消息,有没有更好的设计方案啊?
3 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
因为http是一种应答性质的协议,要想实现异步发送邮件,就必须由服务器本身去实现,而不是http本身。
从设计方面,对于服务器资源宽裕的来说,可以用一台服务器专门做邮件服务器,对外公开接口来实现异步发送邮件。
否则,则需要把要发送的邮件和内容存储起来(如数据库,文本文件,redis等),然后通过以下方式来异步发送。
对于windows系列服务器,可以编写服务,利用系统task等简单来实现。
对于linux系列服务器,可以通过corn
定时,守护进程等来实现。
添加回答
举报
0/150
提交
取消