背景
最近资讯asyncload使用的同学越来越多,会有些一些经常性的问题,这里我做一下整理和answer,同时介绍一下asyncload的UserGuide 和一些限制等。
关于asyncload,又名异步并行加载 ,可参见我之前的文章: (业务层)异步并行加载技术分析和设计
UserGuide篇
几个基本概念:
- 线程池 (定义异步处理的线程池模型,包括线程数,队列大小等)
- 匹配信息 (定义哪些方法需要实施,包括超时时间等)
- 匹配主体 (比如常见的service,dao等,需要进行异步并行加载处理的对象)
声明式: 常规配置(半侵入)
基本步骤:
1. 配置线程池
1.<bean id="asyncLoadExecutor" class="com.agapple.asyncload.AsyncLoadExecutor" init-method="initital" destroy-method="destory">
2. <property name="poolSize" value="10" />
3. <property name="acceptCount" value="20" />
4. <property name="mode" value="CALLSRUN" />
5.</bean>
- 关于poolSize/acceptCount的建议参数,请参考我的另一篇文章: ThreadPoolExecutor几点使用建议
- 关于mode参数,目前支持REJECT和CALLSRUN。
REJECT:当异步提交的任务数超过了acceptCount后,直接返回Reject异常
CALLSRUN:当异步提交的任务数超过了acceptCount后,由当前提交的线程执行runnable任务。此时的线程模型就变为了poolSize+1线程数,你的提交线程也就成为了其中的一个工作线程。建议使用该参数
2. 匹配信息配置
1.<bean id="asyncLoadConfig" class="com.agapple.asyncload.AsyncLoadConfig">
2. <property name="defaultTimeout" value="3000" />
3. <property name="needThreadLocalSupport" value="false" />
4. <property name="needBarrierSupport" value="false" />
5. <property name="matches">
6. <map>
7. <entry key-ref="asyncLoadMethodMatch" value="2000" />
8. </map>
9. </property>
10.</bean>
- defaultTimeout:指异步提交任务后,等待返回结果的超时时间,可以有效保护系统的健壮性(当外部系统不可用时)。如果不想进行超时控制,可设置为0。默认值为0
- needThreadLocalSupport:指异步任务提交后,原先的正常业务处理线程A和异步任务的处理线程B,是否共享ThreadLocal变量,使用需慎用,一般不建议开启。默认值为false,不开启
- needBarrierSupport:指当原先一个业务处理线程,被拆分为N多个异步任务并行处理后,可以通过设置栅栏,在某一代码处要求所有的异步结果均返回后才进行下一步操作。默认值为false,不开启
- matches:匹配点定义,asyncload自带的匹配方式,如果使用spring拦截器处理可不配置该属性,使用spring pointcut定义匹配点。
匹配点定义:(pattern定义需要和匹配主体对象相关联
1.<bean id="asyncLoadMethodMatch" class="com.agapple.asyncload.impl.AsyncLoadPerl5RegexpMethodMatcher" >
2. <property name="patterns">
3. <list>
4. <value>(.*)RemoteModel(.*)</value>
5. </list>
6. </property>
7. <property name="excludedPatterns">
8. <list>
9. <value>(.*)listRemoteModel(.*)</value>
10. </list>
11. </property>
12. <property name="excludeOveride" value="false" />
13.</bean>
- patterns:代表满足该正则的匹配
- excludedPatterns:代表需要被排除的匹配
- excludeOveride:true/false
true: 优先执行excluded排除匹配
false:优先执行满足匹配,在满足匹配通过后,再执行排除匹配
3. 匹配主体配置
1.<bean id="asyncLoadTestFactoryBean" class="com.agapple.asyncload.impl.spring.AsyncLoadFactoryBean"&