Dubbo 异步调用
基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。
在 consumer.xml 中配置:
ps:这里在 consumer中配置,其实在provider中配置也是可以的,文章最后给出基于SpringBoot的注解实现Dubbo异步的案例,在provider中配置1
2
3
4
5
6<dubbo:reference id="fooService" interface="com.alibaba.foo.FooService">
<dubbo:method name="findFoo" async="true" />
</dubbo:reference>
<dubbo:reference id="barService" interface="com.alibaba.bar.BarService">
<dubbo:method name="findBar" async="true" />
</dubbo:reference>
代码案例
1 | // 此调用会立即返回null |
你也可以设置是否等待消息发出: 2
sent=”true” 等待消息发出,消息发送失败将抛出异常。
sent=”false” 不等待消息发出,将消息放入 IO 队列,即刻返回。1
<dubbo:method name="findFoo" async="true" sent="true" />
如果你只是想异步,完全忽略返回值,可以配置 return=”false”,以减少 Future 对象的创建和管理成本:
1 | <dubbo:method name="findFoo" async="true" return="false" /> |
异步理解心得:
昨晚猴哥想吃宵夜了,于是走近厨房,拔出两根猴毛一吹,出现了两个猴孙,一个烧水煮面,一个调配料,弄完之后 猴哥直接就去吃了,这就是异步,本来一个人做吃的需要先调配料再煮面才能吃,而异步化后,能够同时调配料和煮面,这样调配料(4分钟),煮面(5分钟),异步化后就只需要5分钟,表述不好将就看。

评论加载中