dubbo中几种protocol的理解

dubbo:service 标签有 protocol这个属性,在多协议时使用,多个协议ID用逗号分隔。

那么我们可以看下具体有哪几个值:
dubbo 默认
rmi
hessian
http
webservice
thrift
memcached
redis

特性

dubbo

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
http://dubbo.io/user-guide/reference-protocol/dubbo.html

RMI

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

如果正在使用RMI提供服务给外部访问(公司内网环境应该不会有攻击风险),同时应用里依赖了老的common-collections包(dubbo不会依赖这个包,请排查自己的应用有没有使用)的情况下,存在反序列化安全风险。
http://dubbo.io/user-guide/reference-protocol/rmi.html
其底层使用的是spring-context包里的
org.springframework.remoting.rmi.RmiServiceExporter
底层用的是java的rmi技术。

hessian

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

warningHessian 是Caucho开源的一个 RPC 框架,其通讯效率高于WebService和Java自带的序列化。
依赖hessian的包

<dependency> 
<groupId>com.caucho</groupId>  <artifactId>hessian</artifactId> 
<version>4.0.7</version> 
</dependency>

底层使用的是hessian
com.caucho.hessian.server.HessianSkeleton
hessian的暴露服务过程
http://blog.csdn.net/java2000_wl/article/details/7557842

http

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

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

底层使用的是
org.springframework.remoting.httpinvoke.HttpInvokerServiceExporter

webservice

基于CXF的frontend-simple和transports-http实现。
check CXF是Apache开源的一个RPC框架:http://cxf.apache.org,由Xfire和Celtix合并而来 。

底层使用org.apache.cxf.transport.servlet.ServletController

Thrift

当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信息,比如service name,magic number等。使用dubbo thrift协议同样需要使用thrift的idl compiler编译生成相应的java代码,后续版本中会在这方面做一些增强。

依赖Thrift 包

<dependency>
    <groupId>org.apache.thrift</groupId>
    <artifactId>libthrift</artifactId>
    <version>0.8.0</version>
</dependency>

底层
URL url = invoker.getUrl().addParameter(Constants.CODEC_KEY, ThriftCodec.NAME);
只是使用ThriftCodec做了个编码

memcached

可以通过脚本或监控中心手工填写表单注册memcached服务的地址:

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">

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的地址:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值