`

对asy4j异步任务框架的改进和封装

 
阅读更多

Asyn4j是一个开源的异步任务管理框架,关于该框架的使用,网上有很多的例子可以查看,这里不再赘述。由于项目需要,我对该框架进行了封装和改进,改进点就是通过和spring的结合,将线程池、异步队列、线程池的配置都放在配置文件中;除此之外,该框架有一个问题就是如果存在的相同类型的任务过多,成百上千个,那么这些任务就会阻塞后续的任务执行,该框架也解决了该问题。就是通过配置不同的线程池,通过设置属性excuteType,如果设置为byClass那么该类的操作都放在一个线程池中,如果设置为byMethod那么只有该方法的操作放在线程池中执行。其他补多少,直接上代码。

首先是配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
	default-autowire="byName" default-lazy-init="true">
	<bean id="springBeanUtil" class="com.inspur.incloud.common.util.AsynSpringUtil"
		autowire="byName" lazy-init="false" />
		<bean id="dbJobServiceAsynHandler"  class="com.inspur.incloud.common.util.asynjob.core.handler.DbJobServiceAsynHandler" />
	<bean id="fileAsynServiceHandler" class="com.inspur.incloud.common.util.asynjob.core.handler.FileAsynServiceHandler"/>
	<bean id="cacheWorkQueueFullHandler" class="com.inspur.incloud.common.util.asynjob.core.handler.CacheAsynWorkHandler">
		<constructor-arg name="maxLength" value="400" ></constructor-arg>
	</bean>

	<bean id="asynJobService" init-method="getObject" lazy-init="false"
		class="com.inspur.incloud.common.util.asynjob.spring.AsynServiceFactoryBean" >
		<!-- 异步服务器名称 -->
		<property name="serviceName" value="iresourceJobService"></property>
		<!-- 最大工作队列缓存工作数 -->
		<property name="maxCacheWork" value="3000"></property>
		<!-- 当工作队列满时添加工作等待时间 -->
		<property name="addWorkWaitTime" value="2000"></property>
		<!-- 异步工作执行线程池大小   默认:(cpu核数/2)+1 -->
 		<property name="workThreadNum" value="100"></property>
		<!-- 回调执行线程池大小  默认:cpu核数/2 -->
		<property name="callbackThreadNum" value="100"></property>
		<property name="operateMap">
		    <map>
		    	<!-- 虚拟机操作的线程最大允许个数 -->
		    	<entry key="com.inspur.incloud.common.util.asynjob.util.TargetService" value-ref="vmOpExcute"/>
		    </map>
		</property>
		<!-- 是否允许负载均衡 -->
		<property name="allowLB" value="true"></property>
		<property name="workQueueFullHandler" ref="cacheWorkQueueFullHandler" />
		<!-- 任务持久化处理器 -->
		<property name="jobServiceAsynHandler" ref="dbJobServiceAsynHandler" />
		<!-- 服务启动和关闭处理器  -->
	    <property name="serviceHandler" ref="fileAsynServiceHandler" />
    </bean>
    <bean id="vmOpExcute" class="com.inspur.incloud.common.util.asynjob.core.ExcutePool">
        <property name="name" value="openVmThread" />
        <!--有两种可供选择  byClass  or   byMethod, 不区分大小写-->
        <property name="excuteType" value="byClass" />
        <property name="maxCacheWork" value="100" />
        <property name="workThreadNum" value="100" />
        <!-- 当工作队列满时添加工作等待时间 -->
		<property name="addWorkWaitTime" value="2000"></property>
        <property name="callbackThreadNum" value="100" />
        <property name="workQueueSize" value="100" />
    </bean>
</beans>

 由于机密需要,只上传了该包的代码,有问题可以直接留言

 

分享到:
评论

相关推荐

    asy_fifo.rar_asy fifo_异步FIFO

    5. **DPRAM模块**:在ASY_FIFO.v中,DPRAM(双端口RAM)是实现FIFO存储的主要组件。双端口RAM允许同时在两个独立的端口进行读写操作,非常适合异步FIFO的应用。DPRAM的大小应等于FIFO的深度,其接口通常包含读写地址...

    asy_FIFO.rar_asy fifo_asynchronous fifo_异步FIFO

    在本项目中,"asy_FIFO.rar_asy fifo_asynchronous fifo_异步FIFO" 提供了使用Verilog实现异步FIFO的详细代码,包括各个模块,这些代码经过调试已经可以正常使用。 异步FIFO的设计关键在于解决读写指针同步问题,...

    asy_fifo.rar_异步FIFO

    这个压缩包“asy_fifo.rar_异步FIFO”包含了关于异步FIFO的实现方法以及源代码和详细说明文档。 异步FIFO的主要特点在于其读写端口使用了不同的时钟,这种设计通常用于两个不同速度或不同电源域的系统之间进行数据...

    Asy_FIFO-master_异步FIFOverilog_

    在“Asy_FIFO-master”项目中,我们主要探讨的是如何使用Verilog语言来实现异步FIFO。 异步FIFO的核心挑战在于解决时钟域交叉问题,也就是如何在两个不同的时钟域中保持数据的完整性和一致性。通常,这需要一个读...

    上市公司信息不对称程度ASY2007-2022流动性比率非流动性比率收益率反转指标的网盘链接.docx

    虽然ASY1和ASY2在本质上没有明显的区别,但在实际应用中可以根据计算结果的好坏来选择使用哪一个。这些指数通常是通过复杂的统计模型计算得出,能够更全面地反映市场上信息不对称的程度。 ### 三、数据来源与处理...

    【2024年新版】A股上市企业信息不对称指数ASY数据与stata代码2023-1991

    A股上市企业信息不对称指数ASY数据与stata代码2023-1991年 更新日 志: 此次数据更新扩充到了1991-2023年,增量不加价 文献: 金融科技与企 业全要素生产率...—“赋能”和信贷配给的视角_宋敏 政治关联和融资约束_...

    用WebService进行异步通信

    3. **启动异步调用**:调用代理类的`Begin`方法来启动异步调用,该方法接受一个异步回调对象和一个可选的状态对象作为参数,并返回一个`IAsyncResult`实例。 4. **完成异步调用**:当异步操作完成后,通过`...

    asy_generator_load.rar_asy_generator_induction motor_发电机 matlab_

    在MATLAB环境中,异步发电机(ASY Generator)的模型与应用是电力系统研究的重要部分,尤其是在模拟和分析电力系统的动态行为时。这个“asy_generator_load.rar”压缩包包含了一个名为“asy_generator_load.mdl”的...

    asy_generator.rar_ INDUCTION GENERATOR_asy_generator_induction_发

    标题中的“asy_generator.rar_ INDUCTION GENERATOR_asy_generator_induction_发”指的是一个关于异步发电机(Asynchronous Generator)的MATLAB模型文件。这个压缩包可能包含了一个用于模拟和分析异步发电机工作...

    Induction-Generator.zip.rar_异步发电_异步发电机_异步电机 发电

    在本压缩包中,包含两个关键文件:`asy_ge.m` 和 `asy_generator.mdl`,它们分别代表MATLAB的脚本文件和Simulink模型文件,用于模拟异步发电机的工作特性。 `asy_ge.m` 是一个MATLAB脚本,可能包含了初始化参数设置...

    ASY_FIFO.rar_gals

    标题“ASY_FIFO.rar_gals”中的“ASY_FIFO”指的是异步FIFO,而“gals”标签则意味着这个设计是基于全局异步局部同步(GALS,Global Asynchronous Local Synchronous)架构的。GALS架构在现代数字系统设计中具有重要...

    用VHDL编程:异步清零的D触发器

    这段代码定义了一个名为`DFF_ASY`的实体,包含四个端口:`CLOCK`(时钟输入)、`RESET`(异步清零输入)、`DFF_IN`(数据输入)和`DFF_OUT`(数据输出)。 ##### 3.2 异步清零D触发器架构体实现 ```vhdl ...

    上市公司信息不对称程度ASY数据1991-2022流动性比率非流动性比率收益率反转指标的网盘链接.docx

    - ASY1和ASY2在本质上并无显著差异,可以根据分析结果选择使用哪一个。 #### 数据格式 - **面板数据**:这是一种横截面与时间序列相结合的数据类型,适合进行长期趋势和跨期比较的研究。 ### 二、关键指标解释 #...

    asy.rar_Delphi 串口通信_delphi 串口

    总之,"asy.rar_Delphi 串口通信_delphi 串口"是一个针对Delphi开发者的串口通信解决方案,可能包含一个易用的控件和相应的源代码。开发者可以借助这个资源,快速实现串口通信功能,从而在设备控制、数据采集等领域...

    SY7066封装

    SY7066封装,已经批量生产,现贡献出来

    asy_kafk_by_demo.zip

    四、asy_kafk_by_demo项目 这个名为`asy_kafk_by_demo`的压缩包文件,很可能是包含了一个使用Sanic和Kafka的示例项目。Kafka是一种分布式消息中间件,常用于实时数据流处理。在这个项目中,Sanic可能被用来创建一个...

    matlab异步电机的调速仿真-luntan.rar

    2. "ASY2.mdl.txt", "ASY1.mdl.txt", "ASY4.mdl.txt", "ASY3.mdl.txt" - 这些是异步电机调速模型的文本文件,可能分别代表不同的调速策略或控制方案。通过打开和分析这些文件,可以了解具体的电路和控制算法实现。 3...

    CDC_asy_fifo.rar

    标题中的"CDC_asy_fifo.rar"表明这是一个与CDC(时钟域转换)和异步FIFO相关的工程压缩包。在数字系统设计中,时钟域转换是处理不同速度或不同同步域之间数据传输的关键技术,而异步FIFO作为其核心部分,用于存储和...

    android 异步

    最后,Kotlin的Coroutines是近年来流行起来的异步处理框架,它提供了一种更简洁、易读的异步编程模型。Coroutines允许开发者编写类似于同步代码的异步逻辑,通过挂起函数实现非阻塞操作。在Android中,配合协程库如...

Global site tag (gtag.js) - Google Analytics