dubbo 支持的7种协议

      最后更新:2022-04-01 23:20:09 手机定位技术交流文章

      https://blog.com/I'm sorry, csdn/article/details/7983422Photo 由Flickr用户 Xiaojin21cen/article/details/7983422提供。

      1. Dubbo 协议(违约)
      2、rmi 协议
      3. 《赫西安议定书》
      4、http 协议
      5. 网络服务协议书
      第六,节食协议书
      7. 《关于地雷的协定》
      8-重新安排
      面试题:
      Dubbo支持若干协定,包括dubbo、rmi、Hessian、http、webservice、reift和Redis,但Dubbo官员网络建议我们通过Dubbo协定。

      我们现在将更详细地讨论每一项杜博协定,以便我们能够在实际执行中作出适当的权衡。

      1. Dubbo 协议(违约)
      基于 Mina1. 1. 1. 1. 0. 7+hessian3. 2. 1 交互式tbromoting 的默认协议。

      连接个数:单连接
      连接方式:长连接
      传输协议:TCP
      NIO非同步传输是转移机制。
      代号: 黑森二进制序列化
      应用范围:输入到输出参数数据集小(小于100K),消费者多于提供者,单一消费者无法填补提供者的空缺,在最大可能范围内,不使用dubbo协议发送大文件或超长文本。
      适用情景:传统远程服务机制的呼叫。
      1. Dubbo在默认情况下使用杜博协议,该协议使用单一长的连接和NIO星号通信,适合服务电话,包括大量微小数据以及向客户提供的服务,大大超过服务提供机的数量。
      2. 除非请求数量相对较少,否则他不适合提供大量数据服务,如文件、电影等。

      配置如下:

      <dubbo:protocol name=“dubbo” port=“20880” />

      <dubbo:provider protocol=“dubbo” />
      <~-- Set service protocol -->
      <dubbo:service protocol=“dubbo” />

      <dubbo:protocol id=“dubbo1” name=“dubbo” port=“20880” />
      <dubbo:protocol id=“dubbo2” name=“dubbo” port=“20881” />.

      <dubbo:protocol name=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo”
      serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9”
      buffer=“8192” accepts=“1000” payload=“8388608” />

      3. Dubbo协议使用每个服务供应商每个客户默认一次长的连接,如果数据大,则使用若干连接。

      <dubbo:protocol name=“dubbo” connections=“2” />

      <dubbo:service connections=”0”>或<dubbo:reference connections=”0”>表示该服务使用JVM共享长连接。(缺省)
      <dubbo:service connections=”1”>或<dubbo:reference connections=”1”>表示该服务使用独立长连接。
      <dubbo:service connections=”2”>或<dubbo:reference connections=”2”>表示该服务使用独立两条长连接。

      4. 为避免维持大量连接,大型接收连接的数量可能仅限于服务提供者,以确保服务提供者的自我保护。

      <dubbo:protocol name=“dubbo” accepts=“1000” />

      为什么客户似乎比供应商多?
      因为二重身协议 使用一个单一的长连结,如果网络是千兆字节卡(1024兆比特=128兆比特),就可以使用因特网。根据测试结果,每个连接只能填充7M字节(环境可能不同)。供参考),从理论上讲,服务供应商需要20个服务用户来填补网络。

      为什么不能传大包?
      因为二重身协议 使用一个单一的长连结,如果要求的数据包为 500 KByte, 则数据包为 500 kByte 。如果网络是千兆字节卡(1024兆比特=128兆比特),就可以使用因特网。每个连接限为最多7M字节(视环境而定)。供参考),每个服务供应商最多可拥有128 MByte / 500 KByte = 每秒262个TPS。个别服务提供者每个用户每秒的TPS最高为:7MByte/500KByte=14。如果能接受,可以考虑使用,否则,网络就会拥挤。

      你为什么要使用一阶连接?
      他们无法获得服务,因为他们大多由少数服务提供者提供服务。通常只有几台机器,而服务的消费者多,整个网站可能都访问这项服务。例如,摩根的供应商只有6岁。却有上百台消费者,每天都有5亿个电话如果您经常使用赫西安语服务,服务提供者很容易被粉碎。通过单一连接,这是第一次一个客户能够减少服务。长连接,我不确定我是否有信心 能够实现这个目标并使用异步IO,复用线程池,防止C10K问题。

      接口添加技术对客户没有影响,因此,如果客户不需要,不需要重新部署。
      如果客户不需要额外的属性,输入参数和结果集中产生对客户没有影响的属性。
      部署;

      输入参数和结果设定属性变化,不会影响客户的序列化,但如果客户不重新部署输入或输出,则无法提供属性名称变化的属性值。

      总而言之,服务器端和客户不需要完全对齐字段对象,而是坚持最大匹配的概念。

      单独设置如下,如果不与 " 春天 " 合并:

      dubbo.service.protocol=dubbo

      2、rmi 协议
      Java的远程呼叫协议是行业标准

      连接个数:多连接
      连接方式:短连接
      传输协议:TCP
      传输方式:同步传输
      爪哇标准二进制序列化是一种序列化。
      应用范围:输入到输出参数数据包的大小各有不同,消费者人数与提供者数量相等,可以发送文件。
      适用情景:传统远程服务机制的呼叫。,与原生RMI服务互操作
      第一,马绍尔群岛共和国协议采用JDK标准 " java " 。 我道歉,rmi。 :通过使用阻断的短路和JDK标准顺序实现。
      注:
      如果利用马绍尔提供外部访问(公司内部网环境不应易受攻击),则利用马绍尔进行外部访问是可行的。同时,该程序依赖于以前的共同包件(dubbo没有)。检查该应用程序是否在使用中 。出现与反顺序相关的安全脆弱性。
      请检查应用:
      请升级到版本 3. 2 : 版本 2 :
      https://commons.apache.org/proper/commons-collections/release_3_2_2.html
      请更新至4. 版本1:https://commons.comI为不便道歉,apache.http://ww.un.org/proper/commons-collations/release_4_1.html
      这个问题已在新版本的 " 共同教育 " 中得到解决。

      如果服务接口成功, Rmi. remote 接口与本地 RMI 兼容,即:
      供应商通过Dubbo RMI协议,消费者使用标准RMI界面,或供应商通过标准RMI接触服务,消费者通过Dubbo RMI协议接触服务。

      抱歉,Rmi. remote界面 如果服务界面没有继承Java的话默认设置将构建一个com。 我不知道你指的是什么,xxServices$Remote界面,抱歉 Rmi 远程接口 我继承了Java这是从服务处获得服务的唯一办法。

      但如果设置了<dubbo:protocol name=“rmi” codec=“spring” />,不尝试创建远程界面 。并通过Spring RmiInformHandler界面曝光服务。这是春天兼容的。

      <dubbo:protocol name=“rmi” port=“1099” />.

      <dubbo:provider protocol=“rmi” />

      <dubbo:service protocol=“rmi” />

      <dubbo:protocol id=“rmi1” name=“rmi” port=“1099” />
      <dubbo:protocol id=“rmi2” name=“rmi” port=“2099” />
      <dubbo:service protocol=“rmi1” />

      <dubbo:protocol name=“rmi” codec=“spring” />

      3. 《赫西安议定书》
      使用了赫斯语远程呼叫协议 。

      连接个数:多连接
      连接方式:短连接
      传输协议:HTTP
      传输方式:同步传输
      序列化:表单序列化
      应用范围:输入到输出的参数数据集大小不一,供应商多于消费者,浏览器、表格或 URL 可以看到这些数据集可用于输入参数,目前不支持交付文件。
      在这种情况下,需要为应用程序和浏览器提供JS服务。
      1 为了整合赫西安服务,采用了赫西安协议,HTTP通信在赫西安和Serlet接触服务的底部使用,Jetty作为服务器被整合到Dubbo,作为一个服务器被整合到Hessian服务,Hesian协议被使用,HTTP通信在赫西安和Serlet接触服务底部使用,Jetty被嵌入Dubbo作为服务器。
      2 Hessian是一个开放源代码 RPC 框架的caucheo:http://hessian. com/I'm not sure you're talking about, caucho.com, 他们的通讯比WebService和Java自己的顺序效率更高。
      依赖:

      com.caucho hessian 4.0.7

      与最初的赫塞西语服务兼容性,即:
      供应商使用Dubbo Hessian协议披露服务,消费者直接使用正常的Hessian界面,或供应商使用标准Hessian风险服务,消费者使用Dubbo Hessian协议。

      约束
      1. 参数和返回值,以便实施可序列化接口
      2. 参数和返回值无法定制,以完成诸如清单、地图、编号、日期、日历等界面,只能与JDK实现,因为Hessian将进行特殊处理,而自定义实现类中的属性数据将丢失。

      <dubbo:protocol name=“hessian” port=“8080” server=“jetty” />

      <dubbo:provider protocol=“hessian” />

      <dubbo:service protocol=“hessian” />

      <dubbo:protocol id=“hessian1” name=“hessian” port=“8080” />
      <dubbo:protocol id=“hessian2” name=“hessian” port=“8081” />

      <dubbo:reference id=“helloService” interface=“HelloWorld” url=“hessian://10.20.153.10:8080/helloWorld” />

      <dubbo:protocol … server=“jetty” />

      <dubbo:protocol … server=“servlet” />

      抱歉, Web. xml 配置 :

      dubbo com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet 1 dubbo /*

      请记住,如果您使用服务器发送请求,
      议定书的港口必须与服务器集装箱的港口相同。
      协议的上下文路径必须与服务器使用的上下文路径相同。

      4、http 协议
      [关于使用HTTP的通知]是一个基于 http 表格的远程呼叫协议 。

      连接个数:多连接
      连接方式:短连接
      传输协议:HTTP
      传输方式:同步传输
      序列化:表单序列化
      应用范围:输入到输出的参数数据集大小不一,供应商多于消费者,浏览器、表格或 URL 可以看到这些数据集可用于输入参数,目前不支持交付文件。
      在这种情况下,需要为应用程序和浏览器提供JS服务。
      1. 春季推动者实施工作
      配置

      <dubbo:protocol name=“http” port=“8080” />

      <dubbo:protocol … server=“jetty” />

      <dubbo:protocol … server=“servlet” />

      web.xml配置

      dubbo com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet 1 dubbo /*

      请记住,如果请求是通过服务器发送的,请记住
      协议的端口<dubbo:protocol port=“8080” />必须与servlet容器的端口相同,
      协议的上下文路径<dubbo:protocol contextpath=“foo” />必须与servlet应用的上下文路径相同。

      5. 网络服务协议书
      基于网络服务远程呼叫协议

      连接个数:多连接
      连接方式:短连接
      传输协议:HTTP
      传输方式:同步传输
      SOOP 文本
      应用场景:系统整合、交叉语言呼叫
      1. 建立在CXF简单和转让基础上的前端 -- -- http
      2. CXF是阿帕奇开放资料来源的RPC框架:http://cxf.com/CXF.com/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXF.org/CXX

      依赖

      org.apache.cxf cxf-rt-frontend-simple 2.6.1 org.apache.cxf cxf-rt-transports-http 2.6.1

      与最初的网络服务服务兼容性,即:
      供应商通过网络服务协议披露Dubbo的服务,消费者使用标准的网络服务接口,或供应商通过标准的网络服务风险服务服务披露Dubbo的服务,消费者通过Dubbo的网络服务协议披露。

      约束:
      要完成可序列的界面,必须使用参数和返回值。
      参数广泛使用基本类型和POJO。

      <dubbo:protocol name=“webservice” port=“8080” server=“jetty” />

      <dubbo:provider protocol=“webservice” />

      <dubbo:service protocol=“webservice” />

      <dubbo:protocol id=“webservice1” name=“webservice” port=“8080” />
      <dubbo:protocol id=“webservice2” name=“webservice” port=“8081” />

      <dubbo:reference id=“helloService” interface=“HelloWorld” url=“webservice://10.20.153.10:8080/com.foo.HelloWorld” />

      http://10.20.153.10:8080/com.foo.HelloWorldwsdl

      <dubbo:protocol … server=“jetty” />

      <dubbo:protocol … server=“servlet” />

      web.xml

      dubbo com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet 1 dubbo /*

      应当指出,如果请求是通过服务器发送的:
      议定书的港口必须与服务器集装箱的港口相同。
      协议的上下文路径必须与服务器使用的上下文路径相同。

      第六,节食协议书
      《特里夫特协定》现在得到杜博的支持,是最初的特里夫特协定的扩大。原协议已经更新,增加了一些新标题。我不知道该说什么 但我不知道该说什么对不起,神奇的号码,等等。使用 dubbo reift 协议来编译和构建所需的 java 代码, 您也必须使用 rift idl 编译器 。在这方面,下一版将作出若干改进。
      依赖

      org.apache.thrift libthrift 0.8.0

      配置:

      <dubbo:protocol name=“thrift” port=“3030” />

      无效值不由 Trift 支持。 它无法在协议中通过无效值 。

      7. 《关于地雷的协定》
      使用脚本或从控制中心手动填写表格,可登记杂交服务:

      RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
      Registry registry = registryFactory.getRegistry(URL.valueOf(“zookeeper://10.20.153.10:2181”));
      registry.register(URL.valueOf(“memcached://10.20.153.11/com.foo.BarServicecategory=providers&dynamic=false&application=foo&group=member&loadbalance=consistenthash”));

      然后,当客户使用时,发现Memcached的地址并不重要:

      <dubbo:reference id=“cache”
      interface=“http://10.20.160.198/wiki/display/dubbo/java.util.Map” group=“member” />

      或者点对点直连

      <dubbo:reference id=“cache”
      interface=“http://10.20.160.198/wiki/display/dubbo/java.util.Map”
      url=“memcached://10.20.153.10:11211” />

      自定义接口

      <dubbo:reference id=“cache”
      interface=“com.foo.CacheService” url=“memcached://10.20.153.10:11211” />

      建议采用的方法与混合方法相同,即获得(钥匙)、设定(钥匙、价值)和删除(钥匙)。
      如果方法名称不同于正常方法名称, 则需要映射关系( 在“ p:xx” 是弹簧的标准 p 标签) 典型方法名称不同于正常方法名称, 则需要映射关系( 在“ p:xx” 是弹簧的标准 p 标签 ) 。

      <dubbo:reference id=“cache” interface=“com.foo.CacheService”
      url=“memcached://10.20.153.10:11211” p:set=“putFoo”
      p:get=“getFoo” p:delete=“removeFoo” />

      8-重新安排
      管制中心可通过脚本或人工填写表格登记Redis服务:

      RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
      Registry registry = registryFactory.getRegistry(URL.valueOf(“zookeeper://10.20.153.10:2181”));
      registry.register(URL.valueOf(“redis://10.20.153.11/com.foo.BarServicecategory=providers&dynamic=false&application=foo&group=member&loadbalance=consistenthash”));

      客户使用 Redis 的地址不能被检测到:

      <dubbo:reference id=“store”
      interface=“http://10.20.160.198/wiki/display/dubbo/java.util.Map” group=“member” />

      点对点直连

      <dubbo:reference id=“store”
      interface=“http://10.20.160.198/wiki/display/dubbo/java.util.Map”
      url=“redis://10.20.153.10:6379” />

      自定义接口

      <dubbo:reference id=“store” interface=“com.foo.StoreService” url=“redis://10.20.153.10:6379” />

      方法规定与传统方法名称雷迪斯完全相同,即获得(钥匙)、设定(钥匙、价值)和删除(钥匙)。
      如果方法名称与通常的再解方法名称不同,则必须指定地图关系(“p:xx”是标准 Spring p 标签)。

      <dubbo:reference id=“cache” interface=“com.foo.CacheService”
      url=“memcached://10.20.153.10:11211”
      p:set=“putFoo” p:get=“getFoo” p:delete=“removeFoo” />

      面试题:
      1. 杜博选择默认使用哪个序列框架,你还知道什么?
      默认情况下,会使用海珊序列化。 其他选项包括 Duddo、 FastJson、 Java 及其自己的序列 。

      2. Dubbo建议哪项协议?
      默认情况下,使用 dubbo 协议 。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/21331.html

          热门文章

          文章分类