刚才试了下,采用ActiveMQ+Lingo,服务端是空处理,循环调用10000次还是需要3秒,服务端处理需要20秒,平均每个调用消耗是2ms,还是有些高。

解决方案 »

  1.   

    Ajax是页面的异步调用,对服务器端的性能压力负面影响比较大;WebService如果是标准基于XML的性能也非常差,二进制的要好一些但也不够理想。
      

  2.   

    今天试了另外一种方式,也就是前面说的采用线程池任务队列的方式处理(java.util.concurrent),100万条空处理2秒就搞定了,平均每条处理只花费了0.002ms,从性能上应该说是非常理想的。而JMS之前同样的调用每条处理却是2ms。但这种模式有以下问题: 
    首先,任务类需要实现Runnable接口,而要放入的任务是多样的,因此抽象的要求会比较高。准备采用反射机制来解决; 
    其次,这种方式从根本上说是本机调用,无法直接将延迟处理的任务像JMS一样派发到其它服务器。
      

  3.   

    以下是结合Spring AOP实现异步调用:
    1、一个非标准的单例线程池类来管理任务处理,有一个私有实例,所有的外部调用都是静态的。 
    2、一个interceptor,功能是拦截方法,将方法转到线程池中处理。 
    3、对需要异步的service在spring配置文件中换个名字再定义一次并加入拦截器,这样就可以根据bean id来确定调用的是同步方法还是异步方法。已完成,加了拦截后性能稍有下降,100万的空处理需要4-5秒,平均每条花费0.005ms。性能跟调用复杂度都还算可以。