异步并行加载使用说明(asyncload)

本文介绍了Java后端异步并行加载库asyncload的使用,包括声明式配置、集成Spring拦截器模式以及编程式模板模式。文章详细阐述了线程池配置、匹配信息定义、匹配主体配置以及asyncload的限制和性能提升。asyncload通过修改字节码或拦截器实现方法调用的异步处理,并提供了对服务依赖关系链的处理策略。
摘要由CSDN通过智能技术生成

背景

 最近资讯asyncload使用的同学越来越多,会有些一些经常性的问题,这里我做一下整理和answer,同时介绍一下asyncload的UserGuide 和一些限制等。

 

关于asyncload,又名异步并行加载 ,可参见我之前的文章: (业务层)异步并行加载技术分析和设计

UserGuide篇

几个基本概念:

  1. 线程池 (定义异步处理的线程池模型,包括线程数,队列大小等)
  2. 匹配信息 (定义哪些方法需要实施,包括超时时间等)
  3. 匹配主体 (比如常见的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"&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值