Dubbo通信協議

Dubbo支持的通信協議:dubbo://(推薦)、rmi://、hessian://、http://、webservice://、thrift://、memcached://、redis://、rest://

1. Dubbo

Dubbo協議爲默認協議,採用單一長連接和NIO異步通信,基於Hessian作爲序列化協議。適合於小數據量(每次請求在100kb以內)大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況。

Dubbo缺省協議不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低。

  • 連接個數:單連接
  • 連接方式:長連接
  • 傳輸協議:TCP
  • 傳輸方式:NIO 異步傳輸
  • 序列化:Hessian 二進制序列化
  • 適用範圍:傳入傳出參數數據包較小(建議小於100K),消費者比提供者個數多,單一消費者無法壓滿提供者,儘量不要用 dubbo 協議傳輸大文件或超大字符串。
  • 適用場景:常規遠程服務方法調用

2. RMI

RMI協議採用 JDK 標準的java.rmi.*實現,採用阻塞式短連接和JDK標準序列化方式。如果正在使用RMI提供服務給外部訪問 ,同時應用裏依賴了老的common-collections包的情況下,存在反序列化安全風險。

  • 連接個數:多連接
  • 連接方式:短連接
  • 傳輸協議:TCP
  • 傳輸方式:同步傳輸
  • 序列化:Java 標準二進制序列化
  • 適用範圍:傳入傳出參數數據包大小混合,消費者與提供者個數差不多,可傳文件。
  • 適用場景:常規遠程服務方法調用,與原生RMI服務互操作

3. Hessian

Hessian協議用於集成Hessian的服務,Hessian底層採用HTTP通信,使用Servlet 暴露服務,Dubbo缺省內嵌Jetty作爲服務器實現。

Dubbo的Hessian協議可以和原生Hessian服務互操作,提供者用Dubbo的Hessian協議暴露服務,消費者直接用標準Hessian接口調用;或提供者用標準Hessian暴露服務,消費方用Dubbo的Hessian協議調用。

  • 連接個數:多連接
  • 連接方式:短連接
  • 傳輸協議:HTTP
  • 傳輸方式:同步傳輸
  • 序列化:Hessian二進制序列化
  • 適用範圍:傳入傳出參數數據包較大,提供者比消費者個數多,提供者壓力較大,可傳文件。
  • 適用場景:頁面傳輸,文件傳輸,或與原生Hessian服務互操作

數據類型:

  • 原始二進制數據
  • boolean
  • 64-bit date(64 位毫秒值的日期)
  • 64-bit double
  • 32-bit int
  • 64-bit long
  • null
  • UTF-8編碼的string

遞歸類型:

  • list for lists and arrays
  • map for maps and dictionaries
  • object for objects

4. HTTP

使用Json序列化,基於HTTP表單的遠程調用協議。

  • 連接個數:多連接
  • 連接方式:短連接
  • 傳輸協議:HTTP
  • 傳輸方式:同步傳輸
  • 序列化:表單序列化
  • 適用範圍:傳入傳出參數數據包大小混合,提供者比消費者個數多,可用瀏覽器查看,可用表單或URL傳入參數,暫不支持傳文件。
  • 適用場景:需同時給應用程序和瀏覽器JS使用的服務。

5. WebService

基於WebService的遠程調用協議,可以和原生WebService服務互操作,提供者用Dubbo的WebService協議暴露服務,消費者直接用標準WebService接口調用;或提供方用標準WebService暴露服務,消費方用Dubbo的WebService協議調用。

  • 連接個數:多連接
  • 連接方式:短連接
  • 傳輸協議:HTTP
  • 傳輸方式:同步傳輸
  • 序列化:SOAP文本序列化
  • 適用場景:系統集成,跨語言調用。

6. Thrift

當前Dubbo支持的Thrift協議是在原生協議的基礎上添加了一些額外的頭信息,比如 service namemagic number等。Dubbo使用Thrift協議同樣需要使用Thrift的IDL編譯生成相應的Java代碼。

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