dubbo在做rpc的时候,会做两台主机的通讯,需要通讯则需要传输字节数据。所以就需要用到序列化。
netty做通讯
dubbo用netty做通讯的时候,启动类在。NettyClient.java中的doOpen方法中,里面能看到Netty的相关类,比如说bootstrap,当然还有如下代码
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
NettyCodecAdapter adapter = new NettyCodecAdapter(getCodec(), getUrl(), NettyClient.this);
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("decoder", adapter.getDecoder());
pipeline.addLast("encoder", adapter.getEncoder());
pipeline.addLast("handler", nettyHandler);
return pipeline;
}
});
然后去看NettyCodecAdapter 类最后进入ExchangeCodec类的encodeRequest方法,如下:
protected void encodeRequest(Channel channel, ChannelBuffer buffer, Request req) throws IOException {
Serialization serialization = getSerialization(channel);
// header.
byte[] header = new byte[HEADER_LENGTH];
是的,就是Serialization接口,默认是Hessian2Serialization序列化接口。
Serialization接口
该接口有多个实现类,分别如下:
cccc.png
网友评论