Dubbo原理笔记

 

RPC框架,解决服务的远程调用和治理

原理

  1. provider 生产者在注册中心注册。
  2. consumer 订阅到注册中心
  3. 注册中心将自己的服务返回给consumer(serviceName对应的url地址)
  4. Consumer使用Netty和Zookpeer直接调用provider

Dubbo原理笔记

步骤

1、需要部署一个zk服务器(通过ZK文件节点维护了一个键值对)

2、生产者调用注册中心ServiceRegistryCenter的register方法,将直接serviceName和serviceAddress注册到注册中心。

3、注册中心的Register方法主要根据ZK的ip地址连接到ZK服务器,然后创建一个文件节点(父节点代表key,子节点代表value),通过key、value来记录服务名和服务地址。类似registry/com.acme.AcmeService/127.0.0.1:8080(ServiceName为永久,ip为临时,服务停掉临时节点被删除)

3、consumer通过serviceName在注册中心找到对应的url。

4、使用动态代理进行服务调用。网络传输协议使用NIO,具体实现为Netty。

  • 动态代理代理的是客户端的对象。
    动态代理是在不改变目标method的情况下,要对它进行操作,希望调用过程对客户端是无感知的。

服务发现类ServiceDiscovery,

消费者:

动态代理对象RpcClientProxy  rpcClientProxy  = new RpcClientProxy(serviceDiscovery);

IService iService = rpcClientProxy.creat(IService.class);

creat方法:创建一个监听,通过Netty的api创建一个channelFuture(),实现了对远程服务器的链接和注入,解码编码器,

 

生产者:

new RpcService(new ZKServiceRegistryCenterImpl(), serviceAddress);

rpcService.bind(iService,…);      //将提供的服务名称bind到注册中心

rpcService.registerAndListen();   //使用Netty创建一个监听

 

zk的watcher机制,服务变更通知