Missian指南五:使用异步客户端(With spring)
重要:Missian刚刚更新到0.30,修改了异步回调的实现方式,现在基本上做到0侵入性。
建议下载0.30版本使用,调过本章,直接参考:
Missian指南6:使用无侵入性的异步客户端(Missian 0.30 With Spring)
===================================================================
Missian没有绑定spring,但是强烈推荐配合spring一起使用。异步客户端由于需要调用BeanLocator去寻找回调的Bean,如果配合Spring使用,可以直接使用SpringLocator(BeanLocator的唯一实现),否则需要自己实现。
?
使用异步客户端需要注意一点:由于是异步调用,所以一个远程方法的返回值永远是null(如果不是void的话)或者是原生数据类型的默认值。一段时间后(比如100毫秒)后客户端收到这个返回值,会去找到相应的回调对象进行调用。
?
异步的优势是:在调用的期间我们不需要像同步调用一样有一个线程一直在等着它的返回值,而是调用完即可返回释放线程,当客户端接受到返回值后会进行回调,业务流程可以继续往下执行。不要小看这个等待的时间,假如A服务调用了一个跨机房的服务或者一个重型的服务B,那么B的响应时间可能是100毫秒甚至更多,那么可以想象在高并发的情况下,可能A服务的全部线程都耗死在无穷的等待上了。
?
我们还是先看看如何配合Spring来使用Missian异步客户端。
?
步骤一:给Hello.hello(String, int)创建一个回调类
Hello hello = (Hello)asyncMissianProxyFactory.create(Hello.class, "http://localhost:1235/hello");
但目前比较遗憾的是,还不能够支持异步调用Hessian服务。?
另外需要说明的是,这个直接从Context里面取出AsyncMissianProxyFactory只是用来演示异步调用的用法;正常的做法应该是将AsyncMissianProxyFactory注入到我们需要使用它的Bean。