搞定 Dubbo 系列(五):Dubbo的序列化协议

Dubbo是RPC服务端端框架的杰出代表,由于走TCP天生比HTTP快的原因,在springboot盛行的restful(http)情况下,dubbo依旧火热。今天来总结下dubbo常见的几种序列化协议。

一、dubbo协议(默认)

dubbo协议是默认推荐的协议。使用单一长连接NIO 异步通信基于 hessian 作为序列化协议。适用于:传输数据量小,并发量高的场景(一般消费者服务远多于提供者服务)。

  1. 连接个数:单连接
  2. 连接方式:长连接
  3. 传输协议:TCP
  4. 传输方式:NIO异步传输
  5. 序列化:Hessian 二进制序列化
  6. 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。
  7. 适用场景:常规远程服务方法调用














长连接,就是建立连接过后可以持续发送请求,无须再建立连接。

搞定 Dubbo 系列(五):Dubbo的序列化协议_第1张图片

二、hessian协议(较少使用)

Hessian 协议使用 Hessian二进制序列化,多个短连接,底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。

  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:Hessian二进制序列化
  • 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
  • 适用场景:页面传输,文件传输,或与原生hessian服务互操作

注:如果使用servlet派发请求,协议的端口必须与servlet容器的端口相同;协议的上下文路径必须与servlet应用的上下文路径相同。

三、rmi协议(较少使用)

基于Java 二进制序列化,多个短连接,适合消费者和提供者数量差不多的情况,适用于文件的传输,一般较少用。采用JDK标准的java.rmi.*实现,采用阻塞式短连接JDK标准序列化方式 。

  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:TCP
  • 传输方式:同步传输
  • 序列化:Java标准二进制序列化
  • 适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
  • 适用场景:常规远程服务方法调用,与原生RMI服务互操作

如果服务接口继承了java.rmi.Remote接口,可以和原生RMI互操作。如果服务接口没有继承java.rmi.Remote接口,缺省Dubbo将自动生成一个com.xxx.XxxService$Remote的接口,并继承java.rmi.Remote接口,并以此接口暴露服务。

四、http协议

基于http的远程调用协议,json序列化,和restful类似。

  1. 连接个数:多连接
  2. 连接方式:短连接
  3. 传输协议:HTTP
  4. 传输方式:同步传输
  5. 序列化:表单序列化 ,即 json
  6. 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
  7. 适用场景:需同时给应用程序和浏览器JS使用的服务。

配置,








配置DispatcherServlet,


         dubbo
         org.apache.dubbo.remoting.http.servlet.DispatcherServlet
         1


         dubbo
         /*

注意,如果使用 servlet 派发请求:

  • 协议的端口  必须与 servlet 容器的端口相同,
  • 协议的上下文路径  必须与 servlet 应用的上下文路径相同。

五、webservice协议

基于 WebService 的远程调用协议,使用 SOAP 文本序列化。基于CXF的 frontend-simple 和 transports-http 实现。

  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:SOAP文本序列化
  • 适用场景:系统集成,跨语言调用

六、其他协议

dubbo总共支持9中序列化协议,除了以上五种,还有:rest、redis、memcached、thrift四种。

七、多协议配置

Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。

1、不同服务使用不同协议


 
    
    
    
    
    
    
    
    
    
    
    
    
     
    

2、同一服务使用多种协议



    
    
    
    
    
    
    
    
    
    
    

 

你可能感兴趣的:(Dubbo)