对于那些实时性要求不高,但却计算密集或者需要处理大数据量的耗时较长的任务,或是有较慢 I/O 的任务,选择异步化是一个不错的选择。在系统层面,像引入消息中间件来解耦系统,将耗时长的任务放在中间件后异步执行。在方法层面,像把耗时较长的任务放到其他线程中去异步执行。
异步任务的两种类型:
(1)列表异步任务执行后对任务发起方或调用方有感知,比如发出一个事件或通知
(2)列表异步任务执行后对任务发起方或调用方没有感知,只是改变了系统中的某些状态
招商店铺中目前存在的都是第2种情况,在业务上的异步主要分以下两类:
1.订单导出类的功能:导出的订单数据较多,使用异步进行交互
2.提交到batch批处理进行处理
像这样异步场景怎么进行自动化集成呢?
之前也有做法就是通过Thread.sleep(经验值)来进行等待异步任务处理,但中间等待的时间是不确定的。
现介绍一款开源工具awaitility:https://github.com/awaitility/awaitility,
该工具提供轮询的方式,判断操作是否完成,以最短的时间获取异步任务结果。
以下用订单批量受理场景进行举例:
点击【批量受理】后,提交任务到batch落地任务流水。
具体的受理动作由batch批处理中心进行受理。
awaitility 使用步骤:
(1)maven工程在pom.xml添加awaitility依赖:
<dependency>
<groupId>org.awaitility</