Dubbo3 rmi 協(xié)議

2022-04-24 16:41 更新

rmi:// 協(xié)議參考手冊(cè)

RMI 協(xié)議采用 JDK 標(biāo)準(zhǔn)的 java.rmi.* 實(shí)現(xiàn),采用阻塞式短連接和 JDK 標(biāo)準(zhǔn)序列化方式。

注意:如果正在使用 RMI 提供服務(wù)給外部訪問 1,同時(shí)應(yīng)用里依賴了老的 common-collections 包 2 的情況下,存在反序列化安全風(fēng)險(xiǎn) 3

特性

  • 連接個(gè)數(shù):多連接
  • 連接方式:短連接
  • 傳輸協(xié)議:TCP
  • 傳輸方式:同步傳輸
  • 序列化:Java 標(biāo)準(zhǔn)二進(jìn)制序列化
  • 適用范圍:傳入傳出參數(shù)數(shù)據(jù)包大小混合,消費(fèi)者與提供者個(gè)數(shù)差不多,可傳文件。
  • 適用場(chǎng)景:常規(guī)遠(yuǎn)程服務(wù)方法調(diào)用,與原生RMI服務(wù)互操作

約束

  • 參數(shù)及返回值需實(shí)現(xiàn) Serializable 接口
  • dubbo 配置中的超時(shí)時(shí)間對(duì) RMI 無效,需使用 java 啟動(dòng)參數(shù)設(shè)置:-Dsun.rmi.transport.tcp.responseTimeout=3000,參見下面的 RMI 配置

RMI配置

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

更多 RMI 優(yōu)化參數(shù)請(qǐng)查看 JDK 文檔

接口

如果服務(wù)接口繼承了 java.rmi.Remote 接口,可以和原生 RMI 互操作,即:

  • 提供者用 Dubbo 的 RMI 協(xié)議暴露服務(wù),消費(fèi)者直接用標(biāo)準(zhǔn) RMI 接口調(diào)用,
  • 或者提供方用標(biāo)準(zhǔn) RMI 暴露服務(wù),消費(fèi)方用 Dubbo 的 RMI 協(xié)議調(diào)用。

如果服務(wù)接口沒有繼承 java.rmi.Remote 接口:

  • 缺省 Dubbo 將自動(dòng)生成一個(gè) com.xxx.XxxService$Remote 的接口,并繼承 java.rmi.Remote 接口,并以此接口暴露服務(wù),
  • 但如果設(shè)置了 <dubbo:protocol name="rmi" codec="spring" />,將不生成 $Remote 接口,而使用 Spring 的 RmiInvocationHandler 接口暴露服務(wù),和 Spring 兼容。

配置

定義 RMI 協(xié)議:

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

設(shè)置默認(rèn)協(xié)議:

<dubbo:provider protocol="rmi" />

設(shè)置某個(gè)服務(wù)的協(xié)議:

<dubbo:service interface="..." protocol="rmi" />

多端口:

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

Spring 兼容性:

<dubbo:protocol name="rmi" codec="spring" />

  1. 公司內(nèi)網(wǎng)環(huán)境應(yīng)該不會(huì)有攻擊風(fēng)險(xiǎn) ??

  2. dubbo 不會(huì)依賴這個(gè)包,請(qǐng)排查自己的應(yīng)用有沒有使用 ??

  3. 請(qǐng)檢查應(yīng)用:將 commons-collections3 請(qǐng)升級(jí)到 3.2.2;將 commons-collections4 請(qǐng)升級(jí)到 4.1。新版本的 commons-collections 解決了該問題 ??


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)