自定义轻量级RPC框架流程

首先对整体工程的规划:

       对实体类,接口提取到工程rpc-interface; 对服务注册有关的放在工程rpc-registry; 对Netty通信的编解码,序列化工具请求Request,响应Response类的定义等放在工程rpc-common;这些是下面的工程都要依赖的。

       服务端的工程rpc-server:依赖上面所有工程。该工程用于自定义RPC标签,获取服务名称,开启Netty服务端结束客户端连接,向zk注册服务。

       客户端的工程rpc-client:依赖上面所有工程 。该工程用于获取服务代理,开启Netty客户端发起连接。

上面讲的都是RPC框架的工程,并不是用户写的工程哈..


流程如下:

       用户写的服务端工程rpc-server-app依赖于rpc-server。在main方法中启动,扫描配置文件,加载注册类(rpc-registry中的),rpcServer类(rpc-server中的)。在加载这两个类时做如下事情:《1》根据自定义注解,获取所有服务的名称和对应的实体类的map集合。《2》Netty服务端,绑定地址端口,开启服务。《3》向zk集群注册服务地址。

       用户写的客户端工程rpc-client-app依赖于rpc-client。在启动时,加载配置文件,加载服务发现类(rpc-registry中的),rpcClient类(rpc-client中的)。加载时做如下事情:《1》获取代理。《2》开启Netty客户端,实现与Netty服务端的连接(当然要先从zk中获取服务的地址)。


这样就实现了自定义的RPC框架,这里只讲了每个工程的大概原理及作用流程等。当然缺点还是有的,因为服务都做成了非web项目,是通过启动类来启动的,所以在服务关闭时,zk中并没有注销改服务地址。可以通过把改服务做成web项目,关闭时通过监听器实现从zk中注销服务地址。   当然你可以直接使用dubbo.........................



你可能感兴趣的:(RPC)