最后更新: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自己的顺序效率更高。
依赖:
与最初的赫塞西语服务兼容性,即:
供应商使用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 编译器 。在这方面,下一版将作出若干改进。
依赖
配置:
<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 协议 。
本文由 在线网速测试 整理编辑,转载请注明出处。