rmi://

The RMI protocol uses the JDK standard java.rmi.* Implementation, using a block short connection and JDK standard serialization.

Features

  • Number of connections: multiple connections
  • Connection: short connection
  • Transmission protocol: HTTP
  • Transmission: synchronous transmission
  • Serialization: Java standard Object Serialization
  • Scope of application:the number of providers is more than that of consumers and can transfer files.
  • Applicable scenarios: Conventional remote service method calls, interoperating with native RMI services

Constraint

  • Parameters and return values must implement Serializable interface
  • The timeout configuration for RMI is invalid, you need to use java startup parameter settings:-Dsun.rmi.transport.tcp.responseTimeout=3000,see the RMI configuration below

Configuration in dubbo.properties

dubbo.service.protocol=rmi

RMI Configuration

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

more RMI options please check JDK Document

Interface

If the service interface implement the java.rmi.Remote interface, it can interoperate with the native RMI, ie:

  • Providers expose services using Dubbo's RMI protocol, consumers call directly with the standard RMI interface,
  • Or the provider exposes services using standard RMI, and consumers invoke with Dubbo's RMI protocol.

If the service interface doesn't implement the java.rmi.Remote interface:

  • Default Dubbo will automatically generate a com.xxx.XxxService$Remote interface and implement the java.rmi.Remote interface, expose the service as this interface,
  • But if <dubbo: protocol name = 'rmi' codec = 'spring' /> is set, the$Remote interface will not be generated, but Spring's RmiInvocationHandler interface will be used to expose services.

Configuration

configure RMI protocol:

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

configure provider level default protocol:

<dubbo:provider protocol="rmi" />

configure service level default protocol:

<dubbo:service protocol="rmi" />

configure multiple port:

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

Compatible with Spring:

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