下单流程解耦新方案 - 你知道 Spring 事件监听机制吗
一、Spring 事件监听介绍
Spring 对事件监听是通过事件类型、事件类型监听和事件发布器 3 个部分来完成的
上面的代码已经是将订单的保存逻辑从下单接口解耦到订单监听器中了,但是 Spring 使用默认自带的SimpleApplicationEventMulticaster
事件监听发布类是同步通知事件监听器的,这里会阻塞下单主线程,影响接口响应时长。
二、使用异步的事件监听发布类
由于默认的
SimpleApplicationEventMulticaster
类是同步调用,这里可以从 2 个方面入手:
从事件监听器:将事件监听器的事件触发方法改为异步执行,例如加入将生成订单、删除购物车、扣减库存逻辑放入线程池,或者是在
onApplicationEvent
放上上加上@Async
注解,表示该方法异步执行。通过修改默认事件监听发布类的
taskExecutor
属性,这样可以使用已有的件监听发布类来优化相关逻辑
在系统启动时反射修改
SimpleApplicationEventMulticaster
类的taskExecutor
属性,从而让SimpleApplicationEventMulticaster
类支持异步事件通知
三、事件监听机制的代码思考
通过事件监听机制,我们将下单逻辑拆分成如下步骤:
订单检查
生成订单号
发布订单事件,在事件监听中处理订单保存逻辑
所有操作成功后,将订单号返回每个步骤都是各自独立不互相影响,后期引入消息队列,对代码的改动也是很少,只需将事件发布和事件监听的代码换成消息队列的消息发送和消息监听即可。
最后贴一下实战项目地址newbeemall
版权声明: 本文为 InfoQ 作者【越长大越悲伤】的原创文章。
原文链接:【http://xie.infoq.cn/article/4813ffe242fa88090e27dacd3】。文章转载请联系作者。
评论