`
pan_java
  • 浏览: 280050 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

asyn4j -- 异步方法调用框架

    博客分类:
  • java
阅读更多
asyn4j 是一个java异步方法调用框架,基于消费者与生产者模式。包括了异步方法执行,异步回调执行,异步工作缓存模块.支持Spring.

让我们写异步方法不再写很多的相关多线程代码。用asyn4j轻松搞定异步方法调用.提高程序的响应能力.



设计图


1.调用普通方法
主方法
        public static void main(String[] args) { 
                // 初始化异步工作服务 
                AsynService asynService =  AsynServiceImpl.getService(300, 3000L, 3, 2); 
                // 启动服务 
                asynService.init(); 
                // 异步回调对象 
                AsynCallBack back = new TargetBack(); 
                for (int i = 0; i < 1000; i++) { 
                        // 添加加异步工作- TargetService 的 test 方法 ,方法参数 asynej+ i 
                        asynService.addWork(new Object[] { "asyn4j" + i }, 
                                        TargetService.class, "test", new TargetBack()); 
                        //实例化目标对象再调用 
                       // TargetService targetService = new TargetService (); 
                       //asynService.addWork(new Object[] { "asyn4j" + i }, 
                //              targetService , "test", new TargetBack()); 
                        
                } 
        }


异步调用对象
public class TargetService { 
        public String test(String name){ 
                System.out.println(name +" test is execute!"); 
                return name; 
        } 
 
}



回调方法
//回调需继承AsynCallBack抽象类 
public class TargetBack extends AsynCallBack { 
 
        @Override 
        public void doNotify() { 
                //输出异步方法调用返回结果 
                System.out.println(this.methodResult); 
 
        } 
 
}


2.调用Spring Bean的异步方法
调用 Spring testBean 的 myName 方法 
   applicationContext.xml 加入 
    <bean id="springBeanUtil" class="com.googlecode.asyn4j.spring.AsynSpringUtil"> 
        </bean> 
 
  <bean id="asynService" class="com.googlecode.asyn4j.spring.AsynServiceFactoryBean"> 
                 
   </bean> 
 
 
  public class TestMain { 
         
        public AsynService asynService; 
 
        public void setAsynService(AsynService asynService) { 
                this.asynService = asynService; 
        } 
         
        public void maintest(){ 
                for(int i=0;i<10000;i++){ 
                        asynService.addWorkWithSpring(new Object[] { "panxiuyan" + i }, "testBean", "myName"); 
                } 
        } 
 
}


3.使用异步工作缓冲器
AsynService anycService = AsynServiceImpl.getService(300, 3000L, 100, 
                                100); 
                anycService.setWorkQueueFullHandler(new CacheAsynWorkHandler(100)); 
                anycService.init();

当工作队列中的工作超过300个时,异步工作将由CacheAsynWorkHandler?处理;

4.异步工作优级
默认优先级为5  ,相关API 
//目标对象为指定实例 
public void addWork(Object[] params, Object tagerObject, String method,AsynCallBack asynCallBack, int weight); 
 
//目标对象为class 
public void addWork(Object[] params,Class clzss,String method,AsynCallBack asynCallBack,int weight); 
 
//Spring对应 
public void addWorkWithSpring(Object[] params,String target,String method,AsynCallBack asynCallBack,int weight);



看到这里感兴趣了吗?想了解更多查看如下资料或站内信联络.

项目地址:http://asyn4j.googlecode.com
源码SVN : http://asyn4j.googlecode.com/svn/branches/asyn4j
WIKI: http://code.google.com/p/asyn4j/wiki/user_guide






分享到:
评论
25 楼 xiaokang1582830 2012-08-17  
有一点没有考虑到的就是是否可以提供目前已经在调用的calss和class中的方法,其实这功能很简单!不过这样的话使用的时候就可以知道哪些方法已经在调用了如果重复调用此方法就不会多次异步调用
24 楼 pan_java 2011-07-26  
zeng7960983 写道
lz 应该写下api 从google上面下载了代码根据楼主的demo示例发现有问题 请及时更新


现在asyn4j已经是1.3了.这个文章是1.0发表,所以有些问题。你可以到googlecode上下载最新的源码。有问题可以联系我。
23 楼 zeng7960983 2011-07-25  
lz 应该写下api 从google上面下载了代码根据楼主的demo示例发现有问题 请及时更新
22 楼 michael9418 2010-11-17  
duooluu 写道
pan_java 写道
duooluu 写道
为啥不看看java jdk里的Executor框架呢?


这个框架就是用Executor实行的线程池功能.

看到Executor框架中的线程池ThreadPoolExecutor了吗?


这个评论的人真恶心,先不说asyn4j本身如何,就这个这态度,真想打它。他完全就是为了批评而批评,言语间到处流露着对asyn4j作者的不屑。你觉得不好,你可以有两个选择:1、就事论事,说出那儿不好,提出一些修改的意见,言语要中肯。2、你可以走人嘛,没有人把刀架你脖子上强迫你用吧。

将心比心,试想如果这位评论者自己写的代码被别人这样说,心里是什么滋味。更何况asyn4j作者态度还这么好,耐心地跟你这个傲慢的无理取闹者解释。

另外,我觉得asyn4j这个名字取得特别好听,我已决定在自己的一个项目的基础服务中,使用asyn4j来提供异步服务。希望作者再接再励,不被这些负面的评论所打击。将asyn4j做的更好。

随便说一句:中国人老强调国内IT水平太差,中国人自己做不出什么框架来,如今有人尝试,我们却大加指责,这算什么,请问这些指责的人,你们是什么用心?

其实你们没什么用心,无非就是偏见罢了。收起你们可怜巴巴的偏见吧,看看你们自己知道多少,你们自己都做了什么?

只让人想起一句悲凉的话:做和不做的最大区别,就是后者拥有对前者的评论权。仅此而已,奉劝这些人:please do something !
21 楼 sunrie 2010-08-27  
没觉得哪里比Executor优秀,封装意义何在?
20 楼 pan_java 2010-08-27  
<div class="quote_title">cutesource 写道</div>
<div class="quote_div">
<p> </p>
<div style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff; margin: 8px;">
<p style="margin: 0px;">感觉和直接使用ThreadPoolExecutor没多大区别吧</p>
<p style="margin: 0px;">关于JDK的线程池可以参考一下这篇博文<a href="http://blog.csdn.net/cutesource/archive/2010/08/04/5788534.aspx">http://blog.csdn.net/cutesource/archive/2010/08/04/5788534.aspx</a></p>
</div>
<p> </p>
</div>
<p>我是在ThreadPoolExecutor基础上再封装了一层。</p>
19 楼 cutesource 2010-08-26  
<p>
</p>
<div style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff; margin: 8px;">
<p style="margin: 0px;">感觉和直接使用ThreadPoolExecutor没多大区别吧</p>
<p style="margin: 0px;">关于JDK的线程池可以参考一下这篇博文<a href="http://blog.csdn.net/cutesource/archive/2010/08/04/5788534.aspx">http://blog.csdn.net/cutesource/archive/2010/08/04/5788534.aspx</a></p>
</div>

<p> </p>
18 楼 tarsean 2010-08-26  
异步调用,为什么不直接使用JMS呢?
17 楼 JavaLanguageFun 2010-08-26  
我想知道你这个是干啥饿 。。
16 楼 pan_java 2010-08-26  
integergx 写道
再进一步讨论吧,你的框架考虑的还是很不全面的。

是的,下一个版本将包含这些功能,谢谢你们.
15 楼 integergx 2010-08-26  
再进一步讨论吧,你的框架考虑的还是很不全面的。
14 楼 sharkhu 2010-08-26  
integergx 写道
我目前也在寻找这样的框架技术
Spring3已经有个一个Future的异步执行。
自己用线程写也是可以实现的。
我的问题是,如何保证异步调用的容错性?
:调用的程序运行一半,系统死掉了,而该异步调用又是必须完成的业务?



如果能解决这个问题,我想这个框架还是很有用的。

13 楼 pan_java 2010-08-26  
pangyi 写道

askyuan 写道
我只能说胡扯蛋


诸如此类评贴,实在让人不敢恭维啊。

我需到过此类需求。非常感谢楼主的分享。




谢谢,这个贴有两个目的。
1.由于我是闭门造车,对这个框架考虑可能不是很周全.希望积思广义.不断的完善.
2.了解大家项目中是否需要类似这样的框架.
12 楼 pangyi 2010-08-26  

askyuan 写道
我只能说胡扯蛋


诸如此类评贴,实在让人不敢恭维啊。

我需到过此类需求。非常感谢楼主的分享。



11 楼 cya55 2010-08-25  
楼主考虑超时了吗?
10 楼 pan_java 2010-08-25  
integergx 写道
我目前也在寻找这样的框架技术
Spring3已经有个一个Future的异步执行。
自己用线程写也是可以实现的。
我的问题是,如何保证异步调用的容错性?
:调用的程序运行一半,系统死掉了,而该异步调用又是必须完成的业务?


这部份还没有做,不过这个框架要可以清松的扩展.谢谢你的建议.我将会完善这个功能.谢谢!
9 楼 integergx 2010-08-25  
我目前也在寻找这样的框架技术
Spring3已经有个一个Future的异步执行。
自己用线程写也是可以实现的。
我的问题是,如何保证异步调用的容错性?
:调用的程序运行一半,系统死掉了,而该异步调用又是必须完成的业务?
8 楼 duooluu 2010-08-25  
pan_java 写道
duooluu 写道
为啥不看看java jdk里的Executor框架呢?


这个框架就是用Executor实行的线程池功能.

看到Executor框架中的线程池ThreadPoolExecutor了吗?
7 楼 pan_java 2010-08-25  
duooluu 写道
为啥不看看java jdk里的Executor框架呢?


这个框架就是用Executor实行的线程池功能.
6 楼 duooluu 2010-08-25  
为啥不看看java jdk里的Executor框架呢?

相关推荐

Global site tag (gtag.js) - Google Analytics