經常使用協議 —— rmi://

RMI 協議採用 JDK 標準的 java.rmi.* 實現,採用阻塞式短鏈接和 JDK 標準序列化方式。java

注意:若是正在使用 RMI 提供服務給外部訪問,同時應用裏依賴了老的 common-collections 包的狀況下,存在反序列化安全風險。spring

特性安全

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

約束tcp

  • 參數及返回值需實現 Serializable 接口
  • dubbo 配置中的超時時間對 RMI 無效,需使用 java 啓動參數設置:-Dsun.rmi.transport.tcp.responseTimeout=3000,參見下面的 RMI 配置

dubbo.properties 配置ide

dubbo.service.protocol=rmi

RMI配置spa

java -Dsun.rmi.transport.tcp.responseTimeout=3000

接口code

若是服務接口繼承了 java.rmi.Remote 接口,能夠和原生 RMI 互操做,即:blog

  • 提供者用 Dubbo 的 RMI 協議暴露服務,消費者直接用標準 RMI 接口調用,
  • 或者提供方用標準 RMI 暴露服務,消費方用 Dubbo 的 RMI 協議調用。

若是服務接口沒有繼承 java.rmi.Remote 接口:繼承

  • 缺省 Dubbo 將自動生成一個 com.xxx.XxxService$Remote 的接口,並繼承 java.rmi.Remote 接口,並以此接口暴露服務,
  • 但若是設置了 <dubbo:protocol name="rmi" codec="spring" />,將不生成 $Remote 接口,而使用 Spring 的 RmiInvocationHandler 接口暴露服務,和 Spring 兼容。

配置接口

定義 RMI 協議:

<dubbo:protocol name="rmi" port="1099" />

設置默認協議:

<dubbo:provider protocol="rmi" />

設置服務協議:

<dubbo:service protocol="rmi" />

多端口:

<dubbo:protocol id="rmi1" name="rmi" port="1099" />
<dubbo:protocol id="rmi2" name="rmi" port="2099" />

<dubbo:service protocol="rmi1" />

Spring 兼容性:

<dubbo:protocol name="rmi" codec="spring" />
相關文章
相關標籤/搜索