2.RMI

简介: RMI 协议基于 JDK 标准的 `java.rmi.*` 实现,采用阻塞式短连接和 JDK 标准序列化方式。存在多连接、TCP传输、同步传输等特性,适用于常规远程服务调用,但需注意反序列化安全风险及接口兼容性问题。

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

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

特性

  • 连接个数:多连接
  • 连接方式:短连接
  • 传输协议: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

更多 RMI 优化参数请查看 JDK 文档

接口

如果服务接口继承了 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" />


1. 公司内网环境应该不会有攻击风险

2. dubbo 不会依赖这个包,请排查自己的应用有没有使用

3. 请检查应用:将 commons-collections3 请升级到 3.2.2

;将 commons-collections4 请升级到 4.1

。新版本的 commons-collections 解决了该问题

相关文章
|
监控 安全 网络安全
防止TLS阻断:保护您的网络通信安全
本文介绍了TLS在网络安全中的重要性,以及TLS阻断的概念和威胁。讨论了中间人攻击、弱密码和伪造证书等常见攻击手段,并提出检测和防止TLS阻断的策略,包括使用最新TLS版本、强密码套件、证书验证和安全握手协议。此外,建议实施网络监控、防火墙配置、软件更新和安全的内部网络架构。文章还提供了编程示例和法律合规性考虑,强调了持续提升TLS安全性的必要性。
478 0
|
16天前
|
传感器 数据采集 监控
【开源免费】基于 STM32F103C8T6 单片机的智能家居系统设计与实现
基于STM32F103C8T6与ESP8266的智能家居系统,实现温控采集、OLED显示、MQTT上云及APP远程控制。涵盖传感器节点、控制节点与WiFi网关,支持实时监控与远程操作,模块化设计,扩展性强,低成本高稳定性,适用于物联网学习与智能家居开发实践。
|
5月前
|
SQL 缓存 Java
Mybatis及MybatisPlus
MyBatis 是一款优秀的持久层框架,支持自定义 SQL、存储过程及高级映射。其系统架构通过 mybatis-config.xml 配置全局信息,结合 mapper.xml 映射 SQL 语句,构建 SqlSessionFactory 并创建 SqlSession 操作数据库。MyBatis 底层通过 Executor 执行器和 Mapped Statement 对象实现 SQL 的输入输出映射与执行。支持复杂结果集映射,
|
3月前
|
JSON Dubbo 网络协议
1.Dubbo(缺省默认)
Dubbo缺省协议采用单一长连接和NIO异步通信,适合小数据量高并发场景,消费者多于提供者。不适用于大数据传输,如文件或视频,除非请求量低。支持多种传输器、序列化方式和线程池策略。特性包括基于Mina和Hessian的交互、单连接、长连接、TCP传输、NIO异步、Hessian序列化等。适用于常规远程服务调用,但参数和返回值需实现Serializable接口,不能自定义集合类。配置灵活,支持多端口和连接数控制,保障服务提供者的稳定性。
1.Dubbo(缺省默认)
|
5月前
|
存储 负载均衡 Java
SpringCloud框架
本文介绍了微服务架构中常用的技术组件与原理,包括Nacos与Eureka的服务注册与发现机制、Nacos的分级存储模型、OpenFeign的远程调用流程、Ribbon与Spring LoadBalancer的负载均衡策略、Hystrix与Sentinel的限流熔断机制、滑动窗口算法原理,以及Spring Cloud Gateway的路由断言与过滤器功能,全面覆盖微服务核心治理能力。
|
物联网 Linux 云计算
Linux操作系统的演变与未来趋势####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其在服务器、桌面及嵌入式系统领域的应用现状,并展望了云计算、物联网时代下Linux的未来趋势。通过回顾历史、剖析现状、预测未来,本文旨在为读者提供一个全面而深入的视角,以理解Linux在当今技术生态中的重要地位及其发展潜力。 ####
|
机器学习/深度学习 存储 人工智能
【AI系统】为什么 GPU 适用于 AI
本文探讨了GPU在AI计算中的应用,从卷积计算的基本原理入手,解析了GPU线程分级与AI计算模式的关系,以及矩阵乘法如何通过GPU编程提升算力利用率。文章还介绍了计算强度的概念,分析了不同数据结构对计算强度的影响,以及GPU中Tensor Core的作用,强调了在不同存储位置下,找到计算强度与矩阵大小的最佳平衡点对AI计算系统优化的重要性。
898 2
[GHCTF 2024 新生赛]UP+——入土为安的第一天
[GHCTF 2024 新生赛]UP+——入土为安的第一天
292 0
基于simulink的光伏并网逆变器电网系统建模与仿真
本课题使用Simulink实现光伏并网逆变器的建模与仿真,该逆变器负责将光伏电池板产生的直流电转换为与电网同步的交流电。系统通过最大功率点跟踪(MPPT)、DC-DC转换、DC-AC转换及滤波处理,确保电能质量并与电网同步。Simulink模型基于MATLAB 2022a版本构建。
|
自然语言处理 数据可视化 搜索推荐
用Python制作酷炫词云图,原来这么简单!
用Python制作酷炫词云图,原来这么简单!
2541 1