Dubbo的RPC

总结: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方法

生成动态代理类.

你可能感兴趣的:(Dubbo的RPC)