异步调用

1.场景

  基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小

  

 

2.在 consumer.xml 中配置

1 <dubbo:reference id="fooService" interface="com.alibaba.foo.FooService">
2       <dubbo:method name="findFoo" async="true" />
3 </dubbo:reference>
4 <dubbo:reference id="barService" interface="com.alibaba.bar.BarService">
5       <dubbo:method name="findBar" async="true" />
6 </dubbo:reference>

 

3.调用代码

 1 // 此调用会立即返回null
 2 fooService.findFoo(fooId);
 3 // 拿到调用的Future引用,当结果返回后,会被通知和设置到此Future
 4 Future<Foo> fooFuture = RpcContext.getContext().getFuture(); 
 5 
 6 // 此调用会立即返回null
 7 barService.findBar(barId);
 8 // 拿到调用的Future引用,当结果返回后,会被通知和设置到此Future
 9 Future<Bar> barFuture = RpcContext.getContext().getFuture(); 
10 
11 // 此时findFoo和findBar的请求同时在执行,客户端不需要启动多线程来支持并行,而是借助NIO的非阻塞完成
12 
13 // 如果foo已返回,直接拿到返回值,否则线程wait住,等待foo返回后,线程会被notify唤醒
14 Foo foo = fooFuture.get(); 
15 // 同理等待bar返回
16 Bar bar = barFuture.get(); 
17 
18 // 如果foo需要5秒返回,bar需要6秒返回,实际只需等6秒,即可获取到foo和bar,进行接下来的处理。

 

转载于:https://www.cnblogs.com/juncaoit/p/7927440.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值