Dubbo启动以及服务调用的过程总结

服务暴露过程、服务引用过程、服务调用过程、消费者调用底层通信过程、提供者接受请求底层通信过程简单总结

服务暴露过程

服务暴露、服务提供者初始化

服务转化成Invoker -> Invoker转化成Exporter -> Transporter使用具体的Server启动服务监听端口 -> 使用具体的Registry将服务注册注册中心

开始暴露服务,调用ServiceConfig的export方法导出服务,ServiceConfig使用ProxyFactory将我们要暴露的服务转化成一个Invoker。服务转化成Invoker后,需要通过具体的协议(比如Dubbo)将Invoker转化成Exporter(比如DubboExporter)。Exporter中使用Transporter来初始化一个具体的Server(比如Netty),并绑定服务端口,此时服务就被暴露出去了。服务暴露之后会调用具体的Registry(比如Zookeeper)将服务注册到注册中心去。

Dubbo启动以及服务调用的过程总结

引用服务过程

引用服务、消费者初始化、消费者订阅服务

服务订阅 -> 服务转化成Invoker -> Transporter使用具体的Client启动服务准备连接 -> 使用Cluster并继续初始化Invoker -> 封装成一个代理返回。

开始引用服务,调用ReferenceConfig的get方法引用服务,ReferenceConfig调用RegistryProtocol并使用具体的Registry(比如Zookeeper)来订阅服务,Registry会通知Directory开始引用服务(异步),也就是将要引用的服务转化成一个Invoker。Directory会使用具体的Protocol(如Dubbo)将引用的服务转化成一个Invoker。Invoker中使用Transporter来初始化一个具体的Client(比如Netty)用来准备和服务端提供者进行通信。RegistryProtocol调用Cluster的合并方法来初始化Invoker,然后ReferenceConfig在Invoker生成之后返回一个服务的代理。

Dubbo启动以及服务调用的过程总结

服务调用过程

服务调用过程分为两部分:服务消费者调用服务和服务提供者接受服务请求。

服务消费者调用服务

获取到代理 -> 调用Invoker -> Exchange调用远程服务

服务开始调用,首先获取到在服务引用过程中生成的代理,获取到代理后先执行一些过滤器链,比如:缓存、mock等等。接下来会根据Cluster来选择一个具体的Invoker,比如:failover、failsave、failfast、failback、forking、broadcast等,同时使用Directory从Registry中获取所有的invokers,然后使用LoadBalance(random、roundRobin、leastActive、consistentHash)选中具体调用的服务。选中服务之后会先执行过滤器链,再使用具体的Protocol(比如DubboProtocol)调用Transporter并使用具体的Client(比如Netty)来进行服务的调用。发送的请求会进行Codec编码和Serialzation序列化。

服务提供者接受服务请求

服务提供者接收到请求后,会进行反序列化和Decodec解码,然后从线程池中获取一个线程交给具体的Server(比如Netty)进行处理,然后会交给具体的Protocol(比如Dubbo)来根据参数获取具体的Exporter,继续执行一系列的过滤器链,然后使用ProxyFactory来获取具体的Invoker(比如Dubbo),Invoker就会调用真正的服务实现类,然后将结果返回。

Dubbo启动以及服务调用的过程总结

底层通信过程

服务消费者发送请求底层通信过程和服务提供者接受服务请求底层通信过程

稍后添加

原文 

http://cxis.me/2020/03/20/Dubbo启动以及服务调用的过程总结/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Dubbo启动以及服务调用的过程总结

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址