(五)Dubbo協議

1.協議類型

Dubbo支持多種協議的註冊、也支持協議的擴展,Dubbo默認的協議是Dubbo協議,也是官方建議使用的協議。

Dubbo提供以下幾種協議:

  • dubbo協議
  • rmi協議
  • hessian協議
  • http協議
  • webservice協議
  • thrift協議
  • memcached協議
  • redis協議

 

 

1.1、Dubbo協議:(官方建議適用Dubbo協議)

優點:Dubbo缺省協議採用單一長連接和NIO異步通訊,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況。
缺點:Dubbo缺省協議不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低。

1.2、RMI協議:

優點:RMI協議採用JDK標準的java.rmi.*實現,採用阻塞式短連接和JDK標準序列化方式。
缺點:如果正在使用RMI提供服務給外部訪問(公司內網環境應該不會有攻擊風險),同時應用裏依賴了老的common-collections包(dubbo不會依賴這個包,請排查自己的應用有沒有使用)的情況下,存在反序列化安全風險。
請檢查應用:
將commons-collections3 請升級到3.2.2版本:https://commons.apache.org/proper/commons-collections/release_3_2_2.html
將commons-collections4 請升級到4.1版本:https://commons.apache.org/proper/commons-collections/release_4_1.html
新版本的commons-collections解決了該問題

1.3、hessian協議:

優點:
Hessian協議用於集成Hessian的服務,Hessian底層採用Http通訊,採用Servlet暴露服務,Dubbo缺省內嵌Jetty作爲服務器實現。
Hessian是Caucho開源的一個RPC框架:http://hessian.caucho.com,其通訊效率高於WebService和Java自帶的序列化。

1.4、http協議:

基於http表單的遠程調用協議。
連接個數:多連接
連接方式:短連接
傳輸協議:HTTP
傳輸方式:同步傳輸
序列化:表單序列化
適用範圍:傳入傳出參數數據包大小混合,提供者比消費者個數多,可用瀏覽器查看,可用表單或URL傳入參數,暫不支持傳文件。
適用場景:需同時給應用程序和瀏覽器JS使用的服務。
優點:採用Spring的HttpInvoker實現
缺點:
協議的端口<dubbo:protocol port="8080" />必須與servlet容器的端口相同,
協議的上下文路徑<dubbo:protocol contextpath="foo" />必須與servlet應用的上下文路徑相同。

1.5、webservice協議:

基於WebService的遠程調用協議。
連接個數:多連接
連接方式:短連接
傳輸協議:HTTP
傳輸方式:同步傳輸
序列化:SOAP文本序列化
適用場景:系統集成,跨語言調用。
 基於CXF的frontend-simple和transports-http實現。
 CXF是Apache開源的一個RPC框架:http://cxf.apache.org,由Xfire和Celtix合併而來 。 

 

2.協議註冊

2.1、單協議註冊

<!-- 用dubbo協議在20880端口暴露服務 --> 
<dubbo:protocol name="dubbo" port="20881" />
<dubbo:service interface="com.lyh.tea.manager.api.IInfoAPI" ref="infoAPIService" timeout="10000"/>
設置連接時間,在開發調試過程中設置Timeout

2.2、多協議註冊

(1) 不同服務不同協議

<!-- 多協議配置 -->
 <dubbo:protocol name="dubbo" port="20880" />
 <dubbo:protocol name="rmi" port="1099" />
 <!-- 使用dubbo協議暴露服務 -->
 <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" />
 <!-- 使用rmi協議暴露服務 -->
 <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" />

(2) 多協議暴露服務

  <dubbo:protocol name="dubbo" port="20880" />
  <dubbo:protocol name="hessian" port="8080" />
 <!-- 使用多個協議暴露服務 -->
  <dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" protocol="dubbo,hessian" />


 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章