Dubbo异步调用的方式及配置

异步通讯对于服务端响应时间较长的方法是必须的,能够有效地利用客户端的资源,在dubbo中,消费端<dubbp:method>通过 async=”true”标识。

<dubbo:reference id="xxx" ....>
    <dubbo:method name="method1" async="true" />
</dubbo:reference>
具体有以下四种方式:

1、 NIO future主动获取结果,返回结果放在RpcContext中。需要注意的是,由于RpcContext是单例模式,所以每次调用完后,需要保存一个Future实例。如:

fooService.findFoo(fooId);
Future<Foo> fooFuture = RpcContext.getContext().getFuture();
barService.findBar(barId);
Future<Bar> barFuture = RpcContext.getContext().getFuture();
barService.findBar(barId);
Bar bar = barFuture.get();

2、通过回调(Callback)参数。Callback并不是dubbo内部类或接口,而是由应用自定义的、实现了Serializable的接口。服务端和消费端配置分别如下:

  • 服务提供者需在方法中声明Callback参数,其后在Service实现中显示地调用Callback的方法;
 <dubbo:service ..>
   <dubbo:method name="method1">
      <dubbo:argument index="1" callback="true" />  #标识第二个参数是callback类型
   </dubbo:method>
</dubbo:service>
  • Callback接口的实现类在消费端,当方法发生调用时,消费端会自动export一个Callback服务,在Rpc调用完成后,不能立即结束线程。
 <dubbo:reference ...>
    <dubbo:method name="method1" async="true">
 </dubbo:reference>

3、事件通知(推荐)。这种方式更简单,对服务提供方来讲是透明的,包括配置和代码上,均无需做任何改动。消费端定义一个“通知者”的Spring Bean,指定方法的onreturn和onthrow事件action就可以。

<bean id="notify" class="com.alibaba.dubbo.callback.implicit.NofifyImpl" />
<dubbo:reference >
<dubbo:method name="method1" async="true" onreturn="notify.onreturn" onthrow="notify.onthrow" />
</dubbo:reference>

4、只管发送请求,忽略结果值。

  • 只把消息放到发送队列中
  • 消息发送出去后,不关心结果值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值