Dubbo consumer端接收服务端返回结果异步转同步机制及超时处理

Dubbo 结果返回存在三种形式 1.异步无返回结果 2.异步又返回结果 3.同步有返回结果 //代码在DubboInvoker.java 中的82行起

第三种同步有返回结果的情况下

处理流程如下:

1.currentClient.request(inv, timeout).get() 在同步调用中使用currentClient.request(inv, timeout) 做netty请求发送,返回一个DefaultFuture对象,调用 DefaultFuture的get方法

2.DefaultFuture.get(int timeout) 中 首先通过isDone()方法做了是否有服务提供者端结果返回的判断; 还未有返回时,首先记录当前时间,获取线程锁,使用while(!isDone)做循环判断 , 当提供者仍无返回结果时 done.await(timeout, TimeUnit.MILLISECONDS);出现返回结果或是存在超时的情况下跳出循环 ;当此时仍没有 提供者返回结果时抛TimeoutException,最后做返回结果判断 ,当出现res.getStatus() == Response.CLIENT_TIMEOUT || res.getStatus() == Response.SERVER_TIMEOUT时然后会抛TimeoutException。

3.DefaultFuture中的doReceived方法 负责在接到提供者端的返回后给response,同时done.signal()

转载于:https://my.oschina.net/u/3426999/blog/1634268

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值