dubbo服务调用过程

大致流程

1.customer会先调用代理类 ,获取 invoker 然后进行 过滤 如 有服务降级到话 就进行 mockinver。再通过spi进行负载均衡。

2.得到invoker后进行 构造请求头。通过netty 或者 本地暴露进行调用

3.服务端收到请求后,会丢给线程池。

业务线程会根据 servicekey从 exporterMap 获取对应的invoker,调用真正的实现

4.客户端收到结果后会根据request 获取存储的feature。完成服务调用

dubbo中服务调用的三种方式(2.6的方式)

代码在 DubboInvoker 的 doInvoke 中。

  • oneway:

    还是很常见的,就是当你不关心你的请求是否发送成功的情况下,就用 oneway 的方式发送,这种方式消耗最小,啥都不用记,啥都不用管。

  • 异步调用
    其实 Dubbo 天然就是异步的,可以看到 client 发送请求之后会得到一个 ResponseFuture,然后把 future 包装一下塞到上下文中,这样用户就可以从上下文中拿到这个 future,然后用户可以做了一波操作之后再调用 future.get 等待结果。

  • 同步调用
    ,这是我们最常用的,也就是 Dubbo 框架帮助我们异步转同步了,从代码可以看到在 Dubbo 源码中就调用了 future.get,所以给用户的感觉就是我调用了这个接口的方法之后就阻塞住了,必须要等待结果到了之后才能返回,所以就是同步的。

可以看到 Dubbo 本质上就是异步的,为什么有同步就是因为框架帮我们转了一下,而同步和异步的区别其实就是future.get 在用户代码被调用还是在框架代码被调用。

但是2.7有新特性 异步化改造

2.7新特性 异步化改造

核心代码:
在这里插入图片描述
save for 2.6.x compatibility, for example, TraceFilter in Zipkin uses com.alibaba.xxx.FutureAdapter
翻译 :
为了2.6的兼容性,使用了下面代码

暂时没特别明白,
详见下面:
https://blog.csdn.net/qq_27243343/article/details/100171932

参考资料 :
https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453146350&idx=1&sn=059e12e95c2866e54d714012bc4f7d10&scene=21#wechat_redirect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值