RMI 协议采用 JDK 标准的 java.rmi.*
实现,采用阻塞式短连接和 JDK 标准序列化方式。
Serializable
接口-Dsun.rmi.transport.tcp.responseTimeout=3000
,参见下面的 RMI 配置是 Java 的一组拥护开发分布式应用程序的 API,实现了不同操作系统之间程序的方法调用。
从 Dubbo 3 开始,RMI 协议已经不再内嵌在 Dubbo 中,需要单独引入独立的模块。
<dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-rpc-rmi</artifactId>
<version>3.3.0</version>
</dependency>
java -Dsun.rmi.transport.tcp.responseTimeout=3000
更多 RMI 优化参数请查看 JDK 文档
如果服务接口继承了 java.rmi.Remote
接口,可以和原生 RMI 互操作,即:
如果服务接口没有继承 java.rmi.Remote
接口:
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 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" />