Netty RPC 实现
RPC,即 Remote Procedure Call(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样。 RPC 可以很好的解耦系统,如 WebService 就是一种基于 Http 协议的 RPC。这个 RPC 整体框架如下:
关键技术
1. 服务发布与订阅:服务端使用 Zookeeper 注册服务地址,客户端从 Zookeeper 获取可用的服务地址。
2. 通信:使用 Netty 作为通信框架。
3. Spring:使用 Spring 配置服务,加载 Bean,扫描注解。
4. 动态代理:客户端使用代理模式透明化服务调用。
5. 消息编解码:使用 Protostuff 序列化和反序列化消息。
核心流程
1. 服务消费方( client)调用以本地调用方式调用服务;
2. client stub 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
3. client stub 找到服务地址,并将消息发送到服务端;
4. server stub 收到消息后进行解码;
5. server stub 根据解码结果调用本地的服务;
6. 本地服务执行并将结果返回给 server stub;
7. server stub 将返回结果打包成消息并发送至消费方;
8. client stub 接收到消息,并进行解码;
9. 服务消费方得到最终结果。