dubbo 编程式注册消费者和服务者_远程调用


上篇文章介绍了架构方面的演进,Dubbo项目的历史以及作用等内容。今天我们站得高一点,从整体的分层上面来看一下Dubbo的结构。


我在村口等小芳:《深入理解Apache Dubbo与实战》第1章上zhuanlan.zhihu.com

dubbo 编程式注册消费者和服务者_dubbo 消费者也要暴露端口吗_02


Dubbo的总体分层

Dubbo从分包的角度上来看,总共包括了Biz层,RPC层,以及Remote层。


dubbo 编程式注册消费者和服务者_远程调用_03


Service层以及Config层可以认为是API层,这两层也是我们开发人员经常接触的层面。后面的各层,则可以宽泛的认为是SPI层,扩展层,当然如果这个我们需要自定义,当然可以在其规范的情况下进行二次开发,实现自己的协议以及远程调用方式。

Dubbo的核心组件

书上列举的内容比较多,我每一个组件用一句话来概括下:


Service:业务层,主要是业务实现。
Config:配置层,管理整个Dubbo的配置。
Proxy:服务代理,对Dubbo生产者,消费者真是对象的封装。
Registry:服务注册通知层。
Cluster:集群容错层,失败重试,负载均衡等。
Monitor:管理层,统计各种调用信息。
Protocol:远程调用层。
Exchange:信息交换层,建立Request-Response模型,封装请求响应模式。
Transport:网络传输层。
Serialize:序列化层。


Dubbo总体的调用过程

  1. 服务的暴露过程

首先,服务器端(服务提供者)在框架启动时,会初始化服务实例,通过Proxy组件调用具体协议(Protocol),把服务端要暴露的接口封装成Invoker(真实类型是AbstractProxylnvoker,然后转换成Exporter,这个时候框架会打开服务端口等并记录服务实例到内存中,最后通过Registry把服务元数据注册到注册中心。

通过用户配置的Config和Service生成实例,然后根据Dubbo注解,使用Proxy根据不同的Protocol生成不同的invoker对象,然后通过用户指定的Registy注册到注册中心,因此完成了服务提供方的暴露。

Dubbo组件调用的总体流程:


dubbo 编程式注册消费者和服务者_dubbo 编程式注册消费者和服务者_04


首先,调用者拥有一个invoker对象,invoker在调用方法的时候,使用cluster以及loadBalance来进行选择调用那一个服务实例,最后使用客户端直接进行消息编码,然后序列化发起远程的调用。

服务提供者在收到消息后就会进行消息的解码以及反序列化,将Request对象分配到线程池中进行处理。

小结

本章内容主要是围绕着Dubbo的产生,发展,结构部分来展开,大多是科普性的内容,有喜欢的同学也可以多找些材料来开下。