zoukankan      html  css  js  c++  java
  • Dubbo多协议支持

    1.dubbo 协议 (默认)

    1、采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
    2、不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
    用场景:常规远程服务方法调用

    特性

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

    2、rmi 协议

    RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接JDK标准序列化方式 。

    注:
    如果正在使用RMI提供服务给外部访问(公司内网环境应该不会有攻击风险),同时应用里依赖了老的common-collections包(dubbo不会依赖这个包,请排查自己的应用有没有使用)的情况下,存在反序列化安全风险。
    请检查应用:
    将commons-collections3 请升级到3.2.2版本:
    https://commons.apache.org/proper/commons-collections/release_3_2_2.html

    将commons-collections4 请升级到4.1版本:
    https://commons.apache.org/proper/commons-collections/release_4_1.html

    新版本的commons-collections解决了该问题 。

    特性

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

    3、hessian 协议

    Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。

    Dubbo 的 Hessian 协议可以和原生 Hessian 服务互操作,即:

    提供者用 Dubbo 的 Hessian 协议暴露服务,消费者直接用标准 Hessian 接口调用
    或者提供方用标准 Hessian 暴露服务,消费方用 Dubbo 的 Hessian 协议调用。
    Hessian 是 Caucho 开源的一个 RPC 框架,其通讯效率高于 WebService 和 Java 自带的序列化。

    特性

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

    4、http 协议

    基于http表单的远程调用协议。参见:[HTTP协议使用说明]

    特性

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

    5、webservice 协议

    基于 WebService 的远程调用协议,基于 Apache CXF的 frontend-simple 和 transports-http 实现。

    可以和原生 WebService 服务互操作,即:

    提供者用 Dubbo 的 WebService 协议暴露服务,消费者直接用标准 WebService 接口调用,
    或者提供方用标准 WebService 暴露服务,消费方用 Dubbo 的 WebService 协议调用。
    特性

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

    6、thrift 协议

    当前 dubbo 支持的 thrift 协议是对 thrift 原生协议 [2] 的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。

    使用 dubbo thrift 协议同样需要使用 thrift 的 idl compiler 编译生成相应的 java 代码,后续版本中会在这方面做一些增强。

    常见问题
    Thrift不支持null值,不能在协议中传null

    7、memcached 协议

    基于 memcached实现的 RPC 协议。

    8、redis 协议

    基于 Redis实现的 RPC 协议

    9、rest ( 就是 RestFull)

    基于标准的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的简写)实现的REST调用支持

    多协议配置

    dubbo.protocols.dubbo.name=dubbo
    dubbo.protocols.dubbo.port=-1
    
    dubbo.protocols.rest.name=rest
    dubbo.protocols.rest.port=8888
    dubbo.protocols.rest.server=jetty
    
  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/snail-gao/p/14156302.html
Copyright © 2011-2022 走看看