Dubbo协议 —— rmi://

RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。

注意:如果正在使用 RMI 提供服务给外部访问,同时应用里依赖了老的 common-collections 包的情况下,存在反序列化安全风险。

特性

  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议:TCP
  • 传输方式:同步传输
  • 序列化:Java 标准二进制序列化
  • 适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。
  • 适用场景:常规远程服务方法调用,与原生RMI服务互操作

约束

  • 参数及返回值需实现 Serializable 接口
  • dubbo 配置中的超时时间对 RMI 无效,需使用 java 启动参数设置:-Dsun.rmi.transport.tcp.responseTimeout=3000,参见下面的 RMI 配置

dubbo.properties 配置

dubbo.service.protocol=rmi

RMI配置

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

接口

如果服务接口继承了 java.rmi.Remote 接口,可以和原生 RMI 互操作,即:

  • 提供者用 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" />

原文地址:https://www.cnblogs.com/yifanSJ/p/9153325.html

时间: 2024-10-20 05:40:39

Dubbo协议 —— rmi://的相关文章

dubbo之rmi协议使用

普通接口与实现类 public interface DemoService {    String sayHello(String msg);} public class DemoServiceImpl implements DemoService { @Override public String sayHello(String msg) { return "hello " + msg; }} dubbo服务提供者配置 <?xml version="1.0"

Dubbo协议介绍

关于Dubbo使用的demo我在这就不多介绍了,因为很简单,网上资源也很多.在这里我简单介绍一下Dubbo的配置中使用到的最常用的协议. 在介绍协议之前,首先要介绍一下Dubbo的线程模型 事件处理线程说明 如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识,则直接在IO线程上处理更快,因为减少了线程池调度. 但如果事件处理逻辑较慢,或者需要发起新的IO请求,比如需要查询数据库,则必须派发到线程池,否则IO线程阻塞,将导致不能接收其它请求. 如果用IO线程处理事件,

11. Dubbo原理解析-注册中心之基于dubbo协议的接口介绍

服务注册与发现的中心,服务的提供者将服务发布到注册中心,服务的使用着到注册中引用服务. Dubbo的注册中心提供了多种实现,其实现是基于dubbo的spi的扩展机制的,使用着可以直接实现自己的注册中心. @SPI("dubbo") public interface RegistryFactory { /** * 连接注册中心. * 连接注册中心需处理契约 * 1. 当设置check=false时表示不检查连接,否则在连接不上时抛出异常. * 2. 支持URL上的username:pas

12. Dubbo原理解析-注册中心之基于dubbo协议的简单注册中心实现

基于dubbo协议开源只是给出了默认一个注册中心实现SimpleRegistryService, 它只是一个简单实现,不支持集群,就是利用Map<String/*ip:port*/, Map<String/*service*/, URL>来存储服务地址, 具体不在啰嗦了,请读者翻看源代码,可作为自定义注册中的参考. 注册中心启动 SimpleRegistryService本身也是作为一个dubbo服务暴露. <dubbo:protocolport="9090"

dubbo之dubbo协议使用

普通接口及实现类 public interface DemoService{    String sayHello(String msg);} public class DemoServiceImpl implements DemoService{    public String sayHello(String msg)    {        return "hello " + msg;    }} 服务提供者配置 <?xml version="1.0"

Dubbo 协议注意项

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况. 缺省协议,使用基于netty3.2.2+hessian3.2.1交互. 连接个数:单连接    连接方式:长连接    传输协议:TCP    传输方式:NIO异步传输    序列化:Hessian二进制序列化    适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串

Dubbo协议 —— dubbo://(缺省)

dubbo:// Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况. 反之,Dubbo 缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低. Transporter: mina, netty, grizzy Serialization: dubbo, hessian2, java, json Dispatcher: all, direct, message, execution, conn

使用jmeter进行dubbo协议的测试方法

jmeter脚本是作为dubbo消费者 以下为工程主要代码: package com.one; import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.

duboo源码分析4-基于netty的dubbo协议的server

真正的netty server并没有太多的技术含量.主要还是依赖handler的细节处理.