dubbo 协议
来源:互联网 发布:数据的有效性 编辑:程序博客网 时间:2024/05/17 05:57
- dubbo://
Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器远大于服务提供者机器数的情况。
设置默认协议:
- <dubbo:provider protocol="dubbo"/>
- <dubbo:service protocol="dubbo"/>
- <dubbo:protocol id="dubbo1" name="dubbo" port="20880"/>
- <dubbo:protocol id="dubbo2" name="dubbo" port="20881"/>
Dubbo协议的默认选项:
- <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” />
(1)Transporter(传输层):
mina, netty, grizzy
(2)Serialization(序列化):
dubbo, hessian2, java, json
(3)Dispatcher
all, direct, message, execution, connection
(4)ThreadPool
fixed, cached
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”>表示该服务使用独立两条长连接
- <dubbo:protocol name="dubbo" accepts="1000"/>
(1)连接个数:单连接。
(2)连接方式:长连接。
(3)传输方式:TCP。
(4)传输方式:NIO异步传输。
(5)序列化:Hessian二进制序列化。
(6)适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dbbuo协议传输大文件或超大字符串。
(7)适用场景:常规远程服务方法调用。
为什么要消费者比提供者个数多:
因为dubbo协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte),根据测试经验数据每条连接最多只能压满7MByte,理论上1个服务提供者需要20个服务消费者才能压江网卡。
为什么不能传大包:
如果每次请求的数据包大小为500KByte,假设网络为千兆网卡,每条连接最大7MByte那么
(1)单个服务提供者的TPS最大为128MByte/500KByte = 262
(2)单个消费者调用单个服务提供者的TPS最大为:7MByte/500KByte = 14
如果能接受,可以考虑使用,否则网络将成为瓶颈。
为什么采用异步单一长连接:
(1)通过单一连接,保证单一消费者不会压死提供者,因为服务的现状大都是服务提供者少,而服务消费者多。
(2)长连接,减少连接握手验证等。
(3)使用异步IO,复用线程池,防止C10k(concurrent 10000,指的是服务器同时支持成千上万个客户端的问题)问题。
约束:
(1)参数及返回值需实现Serializable接口。
(2)参数及返回值 不能自定义实现List , Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为Hessian会做特殊处理,自定义实现类中的属性值都会丢失。
- rmi://
RMI协议采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式。如果正在使用RMI提供服务组外部 访问,同时应用里依赖了老的common-collections包,存在反序列化安全风险。
(1)将commons-collections3 升级到3.2.2版本。
(2)将commons-collections4升级到4.1版本。
(1)如果服务接口继承了java.rmi.Remote接口,可以和原生RMI互操作,即:
提供者用Dubbo的RMI协议暴露服务,消费者直接用标准RMI接口调用。
或者提供者用标准RMI暴露服务,消费方用Dubbo的RMI协议调用 。
(2)如果服务接口没有继承java.rmi.Remote接口
缺省Dubbo将自动生成一个com.xxx.XxxService$Remote的接口,并继承java.rmi.Remote接口,并以此接口暴露服务。
如果设置 了<dubbo:protocol name="rmi" codec="spring" />,将不生成$Remote接口,而使用Spring的RmiInvocationHandler接口暴露服务,和Spring美容。
设置为默认协议:
- <dubbo:provider protocol="rmi"/>
为服务设置协议:
- <dubbo:service protocol="rmi"/>
- <dubbo:protocol name="rmi" codec="spring"/>
(2)连接方式:短连接。
(3)传输协议:TCP。
(4)传输方式:同步传输。
(5)序列化:Java标准二进序列化。
(6)适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
(7)适用场景:常规远程服务方法调用,与原生RMI服务操作。
约束:
(1)参数及返回值 需要实现Serializable接口。
(2)dubbo配置中的超时时间对rmi无效,需要用java 启动参数设置:
- java -Dsun.rmi.transport.tcp.responseTimeout=3000
- hessian://
Hessian底层采用Http通讯,采用Servlet暴露服务,是Caucho开源的一个RPC框架,其通讯效率高于Webservice和java自带的充钱化。
可以和原生Hessian服务互操作。
(1)连接个数:多连接。
(2)传输方式:短连接。
(3)传输协议:HTTP。
(4)传输方式:同步传输。
(5)序列化:Hessian二进制序列化。
(6)适用范围:传入传出参数数据包较大,提供者比消费者个数大,可传文件。
(7)适用场景:页面传输,文件传输,或与原生hessian服务互操作。
约束:
(1)参数及返回值需要实现Serializable接口。
(2)参数及返回值不能自定义 实现List, Map, Number, Date Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失。
设置为默认协议:
- <dubbo:provider protocol="hessian"/>
- <dubbo:service protocol="hessian"/>
- <dubbo:reference id="helloService" interface="HelloWorld" url="hessian://10.20.153.10:8080/helloWorld"/>
- http://
采用Spring的HttpInvoker实现。
(1)连接个数:多连接。
(2)连接方式:短连接。
(3)传输协议:HTTP。
(4)传输方式:同步传输。
(5)序列化:表单序列化。
(6)适用范围:传入传出参数数据包大小混合,提供者比消费个数多,可用浏览器查看,可用表单或URL传入参数,暂不运动传文件。
(7)适用场景:需同进给应用程序和浏览器JS使用的服务。
约束:
参数及返回值需符合Bean规范。
- webservice://
基于CXF,CXF是Apache开源的一个RPC框架,由Xfire和Celtix合并而来。
可以和原生WebService服务互操作。
(1)连接个数:多个连接。
(2)连接方式:短连接。
(3)传输协议:HTTP
(4)传输方式:同步传输。
(5)序列化:SOAP文本序列化。
(6)适用场景:系统集成,跨语言调用。
约束:
(1)参数及返回值需实现Serializable接口。
(2)参数尽量使用基本类型和POJO。
- thrift://
Thrift是Facebook捐给Apache的一个RPC框架,当前dubbo支持的thrift协议是对thrift原生协议的扩展,在原生协议的基础上添加一些窗外的头信息。
null值不能在thrift协议中传递。
- memcached://
Memcached是一个高效的KV缓存服务器。
- redis://
Redis是一个高效的KV存储服务器。
阅读全文
0 0
- dubbo协议
- dubbo协议
- Dubbo协议
- dubbo 协议
- dubbo 协议
- dubbo协议
- dubbo 集成restful协议
- dubbo协议参考
- Dubbo多协议
- Dubbo多协议
- Dubbo各种协议
- Dubbo默认协议
- dubbo exchange协议
- Dubbo各种协议
- Dubbo协议介绍
- Dubbo默认协议
- Dubbo的协议比较
- Dubbo 几个协议
- POJ 3735 java实现
- Hadoop快速入门学习
- 18
- oracle批量插入,数据量较大时报错,解决措施---分步循环插入
- PHP源生数据分页显示
- dubbo 协议
- 根据对象中某一属性进行升序降序排序的javascript实现
- JAVA-类的加载过程
- vortex-报错集
- 用swagger-ui展示不同路径多个项目的接口文档
- RHEL7 -- 使用Chrony设置时间与时钟服务器同步
- RStudio Server-0.99.902 (OpenLogic CentOS 7.2)
- The 10 most popular coding challenge websites for 2017
- 为RecycleView添加ContextMenu支持