使用SpringBoot进行远程RMI调用

什么是RMI,为什么要使用RMI框架? 这里是修真院后端小课堂,每篇分享文从 八个方面深度解析后端知识/技能,本篇分享的是: 【什么是RMI,为什么要使用RMI框架?】 大家好,我是IT修真院深圳分院第10期的JAVA学员,一枚正直纯洁善良的java程序员。 今天给大家分享一下,修真院官网Java任务8,深度思考中的知识点—什么是RMI,为什么要使用RMI框架? 1.背景介绍 从本质上来说,Spring Boot就是Spring,它做了... 阅读详情

SpringBoot的开发确实及其快速,但是其中也不免有一些需要注意的地方,此次使用SpringBoot进行RMI调用完全是相适应当下的Spring发展趋势,网上搜了很多关于Spring原始的在XMl中配置RMI服务端和客户端的文章,其中有一篇还是很好的,经验证没问题,博客地址是:http://my.oschina.net/hao0610/blog/131686。

此次写的比较简单,首先从服务端的创建开始:

   1、首先建立一个服务接口类,里面的方法什么的随便定义,此处附上我的代码

public interface RMIExService {

	public String invokingRemoteService();
}
然后定义一个实现该接口的类:
<pre name="code" class="java">@Service(value="rmiExServiceImpl")
public class RMIExServiceImpl implements RMIExService{

	@PostConstruct
	public void initMethod(){
		System.out.println("我是初始化方法时调用的");
	}
	@Override
	public String invokingRemoteService() {
		// TODO Auto-generated method stub
		String result="欢迎你调用远程接口";
		return result;
	}

}


 
接下来是配置bean,之前这块是配置在xml文件中的,但是SpringBoot推荐使用全注解,完全按照java自有的方式去调用,所以咱们也不能对着干,按照人家的约定来,其实也还是挺方便的
配置类代码:
<pre name="code" class="java">@Configuration
public class RMIConfig {

	@Autowired
	@Qualifier("rmiExServiceImpl")
	private RMIExServiceImpl serviceImpl;
	/**    
	 * 方法描述:   
	 * 注意事项:    
	 * @return 
	 * @Exception 异常对象 
	*/
	@Bean
	public RmiServiceExporter initRmiServiceExporter(){
		RmiServiceExporter exporter=new RmiServiceExporter();
		exporter.setServiceInterface(RMIExService.class);
		exporter.setServiceName("rmiService");
		exporter.setService(serviceImpl);
		exporter.setServicePort(6666);
		return exporter;
	}
}

 
调试这块的时候有坑,就是你设定了<pre name="code" class="java">exporter.setServicePort(6666);
这块代码之后,却并不起作用,RMI本身就是端口绑定不固定,此处虽然显视的定义了该接口但是却并没有起作用,通过查看服务端启动日志,我可以看到如下的一段话:
<pre name="code" class="plain">] o.s.remoting.rmi.RmiServiceExporter      : Looking for RMI registry at port '1099'
2015-12-22 11:11:17.106  INFO 4820 --- [           main] o.s.remoting.rmi.RmiServiceExporter      : Could not detect RMI registry - creating new one
2015-12-22 11:11:17.129  INFO 4820 --- [           main] o.s.remoting.rmi.RmiServiceExporter      : Binding service 'rmiService' to RMI registry: RegistryImpl[UnicastServerRef [liveRef: [endpoint:[192.168.8.51:1099](local),objID:[0:0:0, 0]]]]
</pre>这里说明这个远程服务被绑定到了<pre name="code" class="plain">192.168.8.51:1099这个地址上。此处主要是针对客户端报地址找不到的错误。
到这里基本上配置算是完成了,但是有一点需要注意,就是在你的Bootstrap类中需要声明下扫描注解类的注解@ComponentScan。我遇到了我的服务实现类没有自动加载到容器中的错误,所以此处需要注意下。
</pre><pre name="code" class="plain">-------------------------------------------------------------华丽的分割线---------------------------------------------
下面就是我们的客户端了,客户端的配置很简单,大环境还是Springboot下。
你首先还是需要将服务端的接口类打成jar包放入你的客户端。
然后配置一个RMI的配置类,此处需要注入Bean,RmiProxyFactoryBean这个类是Spring提供的管理RMI远程服务的工厂类,避免了原使使用Naming.lookup(),违反Spring依赖注入原则的形式。下面是配置的客户端类:
<pre name="code" class="java">@Configuration
public class RMIClientConfig {
	@Bean(name = "rmiService")
	public RmiProxyFactoryBean initRmiProxyFactoryBean() {
		RmiProxyFactoryBean factoryBean = new RmiProxyFactoryBean();
		factoryBean.setServiceUrl("rmi://192.168.8.51:1099/rmiService");
		factoryBean.setServiceInterface(RMIExService.class);
		return factoryBean;
	}
}
调用方式是:
 
RMIExService service=(RMIExService)factoryBean.getObject();
System.out.println(service.invokingRemoteService());
之前在类中已经注入了属性:
@Autowired
    @Qualifier("rmiService")
    private RmiProxyFactoryBean factoryBean;
到这里完整的例子已经完成了,很简单,对于传输对象来说,需要对对象进行序列化。
 
 

Spring RMI使用和原理 RMI全称是Remote Method Invocation-远程方法调用,是纯Java的网络分布式应用系统的核心解决方案之一。Java RMI 支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。RMI目前使用Java远程消息交换协议JRMP进行通信。由于JRMP是专为Java对象制定的,用Java RMI开发的应用系统可以部署在任何支持JRE的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。 阅读详情

相关推荐

spring RMI 远程接口调用

spring RMI 远程接口调用 包含服务端客户端程序,可完整运行

SpringBoot之RMI的简单使用

1.声明 当前内容用于本人学习RMI,这个基于java的服务发布调用协议,感觉类似webservice,但是RMI只能在java之间产生通信,其他的不支持 2.创建主要的项目springboot-rmi 在其模块下面添加rmi-api、rmi-client、rmi-server这三个maven模块 pom.xml的配置 <project xmlns="http://maven.apache...

编程学习者的博客 3644

spring RMI 服务(自动把service发布为RMI服务)

spring RMI 服务(自动把service发布为RMI服务),本例子加入了spring的预处理,可以根据自己的需要把指定位置的bean发布为 RMI 服务。

Spring Boot集成rmi快速入门demo

RMI(Remote Method Invocation)即远程方法调用,是分布式编程中的一个基本思想。实现远程方法调用的技术有很多,比如CORBA、WebService,这两种都是独立于各个编程语言的。而Java RMI是专为Java环境设计的远程方法调用机制,是一种用于实现远程调用(RPC,Remote Procedure Call)的Java API,能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于JVM,因此它支持从一个JVM到另一个JVM的调用。

HBLOG 1663

OpenClaw实操:给网站装上“智能眼睛”?手把手教你用OpenClaw实时监控网站

本文介绍如何在Windows系统使用OpenClaw构建智能网站监控助手。手把手教你通过配置本地AI模型,让openclaw构建的ai助手自动检测指定网页的内容变化,理解更新重要性,并及时通过邮件、微信、Telegram等渠道发出预警,让你第一时间掌握关键信息,彻底告别手动刷新。

plawuyue的博客 2162

STM32G474的HRTIM实战:用CubeMX配置互补PWM驱动全桥电路(附移相算法代码)

本文详细介绍了如何使用STM32G474的HRTIM高分辨率定时器,通过CubeMX配置互补PWM驱动全桥电路,并附移相算法代码。内容涵盖HRTIM硬件架构解析、CubeMX配置全流程、移相控制算法实现及调试技巧,为数字电源和电机控制领域提供实用解决方案。

weixin_27017211的博客 482

Spring boot RMI(远程调用)实现

RMI是java提供的一种远程调用应用服务方式,由于是依赖于JVM,因此仅支持java应用之间的调用。 实现思路其实也比较简单,服务端提供接口,客户端实现并注册到指定端口,服务端通过获取接口的实现bean进行调用。具体代码如下,亲测可行: 1.服务端提供接口 package com.chinacreator.c2.msgcenterqueue; import com.alibaba.fastjson.JSONObject; import com.chinacreator.c2.common.Res

qq_30434271的博客 1075

保姆级教程:用STM32H743+TJA1042T玩转FDCAN,CubeMX配置1M/5M双速率通信(附完整代码)

本文提供STM32H743与TJA1042T实现FDCAN双速率通信的保姆级教程,详细讲解CubeMX配置1M/5M双速率通信的全过程,包括硬件连接、时钟树配置、过滤器设置及中断管理,并附完整代码示例,助力开发者快速掌握FDCAN高速通信技术。

weixin_30698297的博客 473

【SpringBoot项目】实现自定义RMI服务端和客户端注解

RMI服务端的发布1、原理:通过注解注释要发布服务的实现类,修改 spring 的注解扫描工具,当扫描到一个指定的注解就发布一个 rmi 服务。2、spring 发布 rmi 服务的代码...

qq_18244417的博客 893

从JT808/JT1078协议到多端协同:构建高并发北斗车辆监控平台的技术实践

本文详细介绍了基于JT808/JT1078协议构建高并发北斗车辆监控平台的技术实践,包括协议解析、高并发架构设计、多端协同实现及数据持久化策略。通过Netty、Kafka等技术优化,系统成功支撑日均2000万条消息处理,为GPS车辆动态监控系统提供了可靠解决方案。

weixin_28358083的博客 224

大唐杯历届省赛押题训练(6)

考试-TD-LTE无线网络设备介绍-TD-LTE网络架构一、单选题1TD-LTE的接入网E-UTRAN由下列哪些网元组成( )。0分/1分A、RNCB、BTSC、eNode BD、Node B提交答案:B正确答案:C考点TD-LTE网络架构解析暂无试题解析二、多选题1关于LTE网络整体结构,哪些说法是正确的( )0分/2分A、E-UTRAN用E-NodeB替代原有的RNC-NodeB结构B、E-NodeB间的接口为S1接口C、各网络节点之间的接口使用IP传输。

nimo观察者 634

SpringBoot 使用Java RMI进行远程方法调用

SpringBoot中使用RMI进行远程方法调用

Lyndon的专栏 563

YOLOv11涨点改进| TGRS 2026 | 独家创新首发、特征融合改进篇| 引入STSAM协同时空注意力融合模块,发论文热点创新,注意力能够互相引导强化边界和结构细节,增强目标检测、图像分割涨点

🔥本文提出了一种改进YOLOv11网络模型的STSAM协同时空注意力融合模块,用于提升高分辨率遥感变化检测的精度。STSAM通过并行处理全局跨时相注意力和局部坐标注意力,能有效聚焦真实变化目标,强化边界和结构细节。该模块包含两个分支:Cross-Attention分支通过时间嵌入增强双时相特征的时间差异,CoordAtt分支则强化局部结构细节。实验表明,STSAM能显著提升变化检测性能,同时保持训练稳定性。文章详细介绍了模块结构、原理、优势,并提供了完整的核心代码实现和配置方法,包括三种改进方案。

Ai缝合怪、助力小伙伴高效发论文 216

SpringBoot里使用RMI进行远程方法调用

一、Java RMI定义 Java RMI:Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。 二、Java...

dichengyan0013的博客 989

45、概率与模糊性:粗糙事件与模糊事件概率的探索

本文探讨了概率理论与模糊性理论在处理现实世界不确定性中的应用,重点分析了模糊事件和粗糙事件的概率定义、性质及其条件概率。同时,介绍了近似贝叶斯网络分类器在信息系统中的应用,以及如何通过概率决策约简提高分类效率。这些方法为处理不确定信息提供了灵活的工具,并在决策和数据分析中具有重要价值。

ik67890123的博客 133

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 349

springboot之RMI的使用

  1、RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为 "unma...

weixin_34064653的博客 875

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【JAVA使用笔记】——SpringBoot启动方式及远程调用(三)

上一篇:https://blog.youkuaiyun.com/NEU_LightBulb/article/details/102892314 四、以RMI为例的多模块间方法调用 1. Pre RMI、Hessian和Spring HttpInvoker的使用逻辑基本相同: 编写服务端的方法接口与实现 >> 注册到对应的代理中暴露服务 >> 客户...

NEU_LightBulb的博客 468

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java 6 rmi,Java基础 - RMI概述

RMI简介Java RMI,即远程方法调用(Remote Method Invocation),一种用于实现远程过程调用RPC(Remote procedure call)的Java API,能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。 RMI的实现(1) 直接使用Registry实现RMI服务端:publ...

weixin_39929813的博客 133

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java RMI

java本身提供了一种RPC框架——RMI(即RemoteMethodInvoke远程方法调用),在编写一个接口需要作为远程调用时,都需要继承了Remote,Remote接口用于标识其方法可以从非本地虚拟机上调用的接口,只有在“远程接口”(扩展java.rmi.Remote的接口)中指定的这些方法才可远程使用,下面通过一个简单的示例,来讲解RMI原理以及开发流程:   为了真正实现远程调用,首先创建服务端工程rmi-server,结构如下:      代码说明:   1.User.j...

Meiko记录 180

java rmi数据库_分布式架构基础:Java RMI详解

RMI简介​ Java RMI,即 远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPC)(Remote procedure call)的Java API, 能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。rmi架构图rmi的实现(1) 直接使用Registry实现...

weixin_42133415的博客 285

分布式架构基础Java RMI详解

分布式架构基础:Java RMI详解 RMI简介 ​ Java RMI,即 远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPC)(Remote procedure call)的Java API, 能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。 rmi架构图 rmi的实现 (1) 直接使用Registry实现rmi 服务端: public class Regis

小熊的博客 424

RMI,RPC的简单实现

RMI 公共工程         为了更直观,我就不弄父子工程,直接分开工程,建立maven项目作为公共工程rmi-common         User代码 package com.lingaolu.bean; import java.io.Serializable; // rpc调用涉及的,要序列化 public class User

林高禄 668

分布式架构基础:Java RMI详解

分布式架构基础:Java RMI详解 GitHub: https://github.com/jayknoxqu/rmi-example RMI简介 ​ Java RMI,即 远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPC)(Remote procedure call)的Java API, 能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。 rmi架构图 rmi的实现 (1

lixinlin2nj的博客 388
上一篇: java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener
下一篇: MetaQ 安装
轻鸿飘羽
博客等级 码龄16年 124粉丝 74原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值