Dubbo笔记8——多协议支持

除了 Dubbo 服务暴露协议 Dubbo 协议外,Dubbo 框架还支持另外 8 种服务暴露协议:

RMI 协议、Hessian 协议、HTTP 协议、WebService 协议、Thrift 协议、Memcached 协议、Redis
协议、Rest 协议。但在实际生产中,使用最多的就是 Dubbo 服务暴露协议。

1.各个协议的特点

小数据大并发使用 Dubbo,大数据小并发使用其它。

(1 ) dubbo 协议
  • Dubbo 默认传输协议
  • 连接个数:单连接
  • 连接方式:长连接
  • 传输协议:TCP
  • 传输方式:NIO 异步传输
  • 适用范围:传入传出参数数据包较小(建议小于 100K),消费者比提供者个数多,单一
  • 消费者无法压满提供者,尽量不要用 dubbo 协议传输大文件或超大字符串。
(2 ) rmi 协议
  • 采用 JDK 标准的 java.rmi.* 实现
  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:TCP
  • 传输方式:BIO 同步传输
  • 适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
(3 ) hession 协议
  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:HTTP
  • 传输方式:BIO 同步传输
  • 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者抗压能力较大,
    可传文件
(4 ) http 协议
  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:HTTP
  • 传输方式:BIO 同步传输
  • 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或 URL 传入参数,暂不支持传文件。
(5 ) webService 协议
  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:HTTP
  • 传输方式:BIO 同步传输
  • 适用场景:系统集成,跨语言调用
(6 ) thrift 协议

Thrift 是 Facebook 捐给 Apache 的一个 RPC 框架,其消息传递采用的协议即为 thrift
协议。当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展。Thrift 协议不支持 null
值的传递。

(7 ) memcached 协议与 redis 协议

它们都是高效的 KV 缓存服务器。它们会对传输的数据使用相应的技术进行缓存。

(8 ) rest 协议

若需要开发具有 RESTful 风格的服务,则需要使用该协议。

2.同一服务支持多种协议

2.1 应用场景

系统在使用过程中其使用场景逐渐发生了变化,
例如,由原来的消费者数量多于提供者数量,变为了消费者数量与提供者数量差不多了,并且原来系统不用传输文件,现在的系统需要传输文件了。此时就将将原来默认的 dubbo协议更换为 rmi协议。
目的是为了兼容老工程,扩展新功能。

2.2 修改提供者配置文件
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:protocol name="rim" port="1099"/>

    <bean id="someService" class="com.abc.provider.SomeServiceImpl"/>

    <dubbo:service interface="com.abc.service.SomeService" ref="someService" protocol="dubbo,rim"/>

消费者若要连接当前的服务,就需要通过这里指定的协议及端口号进行访问。这里的端口号可以是任意的,不一定非要使用默认的端口号(Dubbo默认为20880,rmi默认为1099)。这里指定的协议名称及端口号,在当前服务注册到注册中心时会一并写入到服务映射表中。
当消费者根据服务名称查找到相应主机时,其同时会查询出消费此服务的协议、端口号等信息。其底层就是一个 Socket 编程,通过主机名与端口号进行连接。

2.3 修改消费者配置文件
 <!--指定消费0.0.1版本,即oldService提供者-->
    <dubbo:reference id="someService"  version="0.0.1" protocol="dubbo"
                     interface="com.abc.service.SomeService" />

    <!--指定消费0.0.2版本,即newService提供者-->
    <dubbo:reference id="someService"  version="0.0.2" protocol="rim"
                     interface="com.abc.service.SomeService"/>

3.不同服务使用不同协议

3.1应用场景

同一个系统中不同的业务具有不同的特点,所以它们的传输协议就应该根据它们的特点
选择不同的协议。
例如对于前面使用服务分组实现的“微信支付”与“支付宝支付”,就可以针对不同的支付方式,使用不同的协议。

3.2 修改提供者配置文件
    <dubbo:protocol name="dubbo" port="1111"/>
    <dubbo:protocol name="rim" port="2222"/>

    <!--注册Service实现类-->
    <bean id="weixinService" class="com.abc.provider.WeixinServiceImpl"/>
    <bean id="zhifubaoService" class="com.abc.provider.ZhifubaoServiceImpl"/>

    <!--暴露服务-->
    <dubbo:service interface="com.abc.service.SomeService"
                   ref="weixinService" protocol="dubbo"/>
    <dubbo:service interface="com.abc.service.SomeService"
                   ref="zhifubaoService" protocol="rim"/>

3.3 修改消费者配置文件

    <!--指定调用微信服务-->
    <dubbo:reference id="weixin"  protocol="dubbo"
                     interface="com.abc.service.SomeService"/>
    <!--指定调用支付宝服务-->
    <dubbo:reference id="zhifubao"  protocol="rim"
                     interface="com.abc.service.SomeService"/>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

占星安啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值