一、服务发布与引用
服务发布与引用的三种常用方式:RESTful、XML配置以及IDL文件。Double主要采用XML配置方式。
服务提供者的XML配置:
Dubbo会把以上配置解析成URL格式:
dubbo://host-ip:20880/com.alibaba.dubbo.demo.DemoService
然后基于扩展点自适应机制,通过 URL 的“dubbo://”协议头识别,就会调用DubboProtocol 的 export() 方法,打开服务端口20880,就可以把服务 demoService 暴露到 20880 端口了。
服务消费者的XML配置L:
"dubbo:reference"开头的配置项声明了服务消费者要引用的服务,Dubbo 会解析成URL格式
dubbo://com.alibaba.dubbo.demo.DemoService
然后基于扩展点自适应机制,通过URL的“dubbo://”协议头识别,就会调用DubboProtocol 的 refer() 方法,得到服务 demoService 引用,完成服务引用过程。
二、服务注册与发现
服务提供者注册服务的过程,继续以前面服务提供者的 XML 配置为例,其中“dubbo://registry”开头的配置项声明了注册中心的地址,Dubbo 会把以上配置项解析成下面的 URL 格式:
registry://multicast://224.5.6.7:1234/com.alibaba.dubbo.registry.RegistryService?export=
基于扩展点自适应机制,通过URL的"registry://"协议头识别,就会调用RegistryProtocol的export()方法,将export参数中的提供者URL,注册到注册中心。
服务消费者发现服务的过程,以前面服务消费者的XML配置为例,其中"dubbo://registry"开头的配置项声明了注册中心的地址,跟服务注册的原理类似,Dubbo会把以上配置解析成下面的URL格式:
registry://multicast://224.5.6.7:1234/com.alibaba.dubbo.registry.RegistryService?refer=U
基于扩展点自适应机制,通过URL的"registry://"协议头识别,调用RegistryProtocol的refer()方法,基于refer参数中的条件,查询服务demoService的地址。
三、服务调用
Dubbo支持多种通信框架,比如Netty4,需要在服务端和客户端的XML配置中添加下面的配置项。
服务端:
客户端:
基于扩展点自适应机制,客户端和服务端之间的调用会通过Netty4框架来建立连接,丙炔服务端采用NIO方式来处理客户端的请求。
Dubbo不仅采用Dubbo协议,还支持其他协议比如Hessian、RMI、HTTP、Web Service、Thrift等。
于数据序列化和反序列方面,Dubbo 同样也支持多种序列化格式,比如 Dubbo、Hession 2.0、JSON、Java、Kryo 以及 FST 等,可以通过在 XML 配置中添加下面的配置项。
四、服务监控
主要包括四个流程:数据采集、数据传输、数据处理和数据展示,其中服务框架的作用是进行埋点数据采集,然后上报给监控系统。
在 Dubbo 框架中,无论是服务提供者还是服务消费者,在执行服务调用的时候,都会经过Filter 调用链拦截,来完成一些特定功能,比如监控数据埋点就是通过在 Filter 调用链上装备了 MonitorFilter 来实现的,详细的代码实现你可以参考这里。
五、服务治理
包括节点管理、负载均衡、服务路由、服务容错等。
Dubbo框架服务的具体实现,Invoker是对服务提供者节点的抽象,Invoker封装了服务提供者的地址以及接口信息。
六、一次服务调用的流程
Dubbo框架一次服务调用过程,
客户端发起调用的过程:
客户端的请求就从一个本地调用转化成一个远程 RPC 调用,经过服务调用框架的处理,通过网络传输到达服务端。其中服务调用框架包括通信协框架 Transporter、通信协议 Codec、序列化 Serialization 三层处理。
服务端从网络中接收到请求后的处理过程:
Dubbo官方文档,源码