合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 一、概述 业务系统中,有时候需要产生一些异步任务,在**JobServer**中来消费执行,协作完成异步运行逻辑; 平台为了通用处理,提供了一套通用的机制来解决异步任务的生成和消费执行; ## 二、方案 ### **1. 定制项目的待办类型** 参考《定制异步执行事件类型》部分; [项目实战/后端开发/平台基础设施/定制待定常量](../%E5%B9%B3%E5%8F%B0%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD/%E5%AE%9A%E5%88%B6%E5%BE%85%E5%AE%9A%E5%B8%B8%E9%87%8F.md); ### **2. 产生特定的异步待办列表,参考下面的示范代码;** ``` @Autowired private AsynTodoGenerator asynTodoGenerator; ``` ``` asynTodoGenerator.registerTodo(RayiotPromisedAsynExecuteType.addWhiteNumber, UniframeworkString.instance(asynTodoGenerator.splitChar).append(cardId).append(cardNumber).toString(), UniframeworkString.instance(asynTodoGenerator.splitChar).append("卡片Id").append("待添加白名单号码").toString()); ``` >[danger] 这里,产生了执行的参数,后面执行的时候,就是依据这里产生待办任务时候传入的参数来进行解析的; ### **3. 依据待办列表,执行待办业务,参考下面的示范代码;** 针对每种RayiotPromisedAsynExecuteType 类型的不同,定制自己的实现类; ``` @Component public class Handler1 implements AsynToDoHandler { @Override @Transactional public void handle(SysAsynTodo executeTypeToDo, AsynTodoExecutor asynTodoExecutor) { } @Override public long asynToDoExecuteType() { return 2; } } ``` >[danger] 注意: > 1、需定义为bean,且实现AsynToDoHandler接口; > 2、handle需标注事务@Transactional; > 3、每次处理一个待办项,如果需要处理多个,那么,可以自行积累多个任务一起处理; #### 代码示范: ``` @Component public class ActivateCardHandler implements AsynToDoHandler { @Autowired private CardInfoDao cardInfoDao; @Override @Transactional public void handle(SysAsynTodo executeTypeToDo, AsynTodoExecutor asynTodoExecutor) throws Exception { long cardId = asynTodoExecutor.getExecuteParameterLong(todoActivateCard, 0); CardInfo cardinfo = cardInfoDao.findById(cardId).get(); ApiFacade.activateCard(cardinfo); } @Override public long asynToDoExecuteType() { return RayiotPromisedAsynExecuteType.activateCard; } } ```