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"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章