主页 > 设计师中山人才网

Dubbo的底层实现原理和机制

110 2023-04-10 06:25

Dubbo :是一个rpc框架,soa框架

作为RPC:支持各种传输协议,如dubbo,hession,json,fastjson,底层采用mina,netty长连接进行传输!典型的provider和cusomer模式!

作为SOA:具有服务治理功能,提供服务的注册和发现!用zookeeper实现注册中心!启动时候服务端会把所有接口注册到注册中心,并森芦且订阅configurators,服务消费端订阅provide,configurators,routers,订阅逗大变更时,zk会推送providers,configuators,routers,启动时注册长连接,进行通讯!proveider和provider启动后,后台启动定时器,发送统计数据到monitor!提供各种容错机制和负载均衡策略!!

描述一个服务从发布到被消费的详细过程:

一个服务的发布暴露过程:

首先设置一个项目的别名,然后是定义注册中心和设定传输协议,之后定义服务名!服务接口以jar形式导入到provider!

一个服务发布暴露首先由spring的spacehander 把相关的xml或者注解全部转化为springBean,之后通过ServiceConfig.exerp()方法把bean传化为传输所需的url和参数注册到注册中心,发布后provder端的ref(helloImpl)通过protocl(传输协议,如dubboprotocl,hessionprotocl)转化为Invoker对象,即调用信息,包括类,方法,参数等等,再通过proxy操作(代理)如jdkproxy代理转为为Exporter对象,这就是整个的服务暴露过程!

消费过程:

一个Renfence类,通过RenfenceConfig的init 调用proxy的refer方法生产一个invoker,invoker再通过proctol转化成具体的ref(hello),进行消费

首先 ReferenceConfig 类的 init 方法调用 Protocol 的 refer 方法生成 Invoker 实例(如上图中的红色部分),这是服务山春竖消费的关键。接下来把 Invoker 转换为客户端需要的接口(如:HelloWorld)

具体参见

!/docs/dev/implementation.md?lang=zh-cn

Exporter接口提供Invoker的调用和destroy()

public interface Exporter<T> {

}

#Dubbo的实现

Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。