总结:RPC有三个要素:1,网络通信;2,序列化;3,代理
网络通信
Dubbo默认使用dubbo协议 DubboProtocol,在这个类中利用了Netty工具
看一下导出export方法:
参数invoker代表一种可执行体,可参考DubboInvoker的实现
前面判断是否是是stub方法是的话缓存
openServer方法:
先判断地址是否已经有连接ExchangerServer如果没有则put到servermap如果有则reset
看一下createServer方法:
其中requestHandler为ExchangeHandlerAdapter的实现类,用来处理收到的消息
返回一个HeaderExchangeServer
DecodeHandler和HeaderExchangeHandler各是一个装饰类
DecodeHandler在接到消息后加入编码的功能
Transporters.bind
NettyTransporter
DubboProtoco中保存的是key(也就是地址)到HeaderExchangeServer的映射
HeaderExchangeServer通过调用NettyServer发送消息,管理Channel,发送心跳
序列化
默认使用Hession2序列化
在解码中ExchangecCodec.encodeRequest为例
代理
默认使用Javassist生成动态代理class类
都添加EchoService接口
InvokerInvocationHandler
都是调用invoker.invoke方法
在getProxy方法中使用Javassist动态生成了Proxy的子类实现了newInstance方法
生成动态代理类.
网友评论