1. 需求 开发中我们经常遇到异步接口需要执行一些耗时的操作,并且接口要有返回结果。 使用场景:用户绑定邮箱、手机号,将邮箱、手机号保存入库后发送邮件或短信通知 接口要求
1. 需求开发中我们经常遇到异步接口需要执行一些耗时的操作,并且接口要有返回结果。 使用场景:用户绑定邮箱、手机号,将邮箱、手机号保存入库后发送邮件或短信通知 一般的话在企业中会借用消息队列来实现发送,业务量大的话有一个统一消费、管理的地方。但有时项目中没有引用mq相关组件,这时为了实现一个功能去引用、维护一个消息组件有点大材小用,下面介绍几种不引用消息队列情况下的解决方式 定义线程池:
2. 解决方案2.1 @Async定义异步任务,如发送邮件、短信等
Controller
运行结果: 2.2 TaskExecutor
运行结果: 2.3 Future首先去掉Service方法中的@Async("taskExecutor"),此时执行就会变成同步,总计需要5s才能完成接口返回。这次我们使用jdk1.8中的CompletableFuture来实现异步任务
运行结果: 2.4 @EventListenerSpring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式;为的就是业务系统逻辑的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。 2.4.1 定义event事件模型
2.4.2 事件监听
2.4.5 事件发布
运行结果: 3. 总结通过@Async、子线程、Future异步任务、Spring自带ApplicationEvent事件监听都可以完成以上描述的需求。 |
2021-06-05
2021-05-27
2021-05-26
2021-06-05
2021-05-16