使用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

Labview及NI-USRP驱动安装教程

软件下载 安装使用的LabVIEW2018及NI-USRP驱动程序已上传,下载地址: 天翼云盘链接 (访问码:oc33) 百度网盘链接 (提取码:88mi) (注:天翼云盘下载不限速) LabVIEW2018安装步骤 右键软件压缩包选择解压至LabVIEW2018 选中文件,鼠标右击选择以管理员身份打开2018LV-WinChn.exe文件。 点击确定。 点击Unzip解压。 点击确定。 点击下一步。 填写任意信息后,点击下一步。 点击下一步。 点击浏览更改安装路径建议安装到除C盘以

dadapongi6的博客 2万+

一。CST 电路 微带低通滤波器设计练习 I

CST 电路和系统软件功能还是比较强的,我们一起一步一步学习,一起进步。 这个例子出现在CST的电路和系统软件功能(Circuit Simulation & SAM (System Assembly and Modeling) )介绍资料中。本文是用CST2021建模操作仿真到,不同版本在视觉和结果上稍有不同。 利用电路模块可以很快很准确地建立3D微带平面电路,用于仿真滤波器、功分器、巴伦等等。

麦克斯韦信徒的博客 3235

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

ArcMap 10.7/10.8启动加载界面后闪退?可能是这个隐藏的Normal.mxt模板文件在搞鬼

本文深入分析了ArcMap 10.7/10.8启动加载界面后闪退的问题,指出Normal.mxt模板文件损坏是常见原因。提供了从定位、删除模板文件到系统级修复的完整解决方案,帮助GIS工程师快速恢复工作流程。

weixin_28523493的博客 330

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

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

qq_18244417的博客 893

创新实训项目博客:基于LoRA的医疗大模型高效微调实战

预训练大语言模型(LLMs)虽然具备了广泛的知识和一定的通用能力,但在特定领域(如医疗)或特定任务(如遵循特定指令格式进行思考链推理)上,其表现往往不尽如人意。微调(Fine-tuning)能够使模型学习到特定领域的数据分布和任务模式,从而在目标任务上获得更好的性能,使其更贴合实际应用需求。使用Unsloth框架加载并以4-bit量化模型。基于数据集,构建了包含明确思考链引导的训练Prompt。配置了LoRA参数,并使用SFTTrainer在单张T4 GPU上对模型进行了高效微调。

m0_73556916的博客 1290

Zigbee通信(CC2530终端 + ESP32-C6协调器)

实现了CC2530 zigbee终端与ESP32-C6 zigbee协调器的通信交互。

Ecsply的博客 2564

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

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

Lyndon的专栏 563

EDA课程实验:《数字逻辑电路》实验四___基于Minisys 平台 VIVADO工具与Verilog语言

(4)使用 Verilog HDL 实现一个分频器 clock_div,输入的是系统提供的 100MHz 频率,输出的是 1Hz 频率,占空比是 1:2,(实际上可以用一个加 1 计数器来实现降频,输入的是一个 100MHz 频率的方波,对这 个方波计数 1 亿次刚好到 1 秒(1Hz),题目要求输出频率占空比是 1:2,也就是这个 1Hz 的 方波高电平和低电平各 500ms,可以采用计数到中间值的时候输出电平翻转。(1)1) 拨动 SW1~0 为 01,按下 P4 按钮,GLD1~0 为 01;

ssjy_的博客 1296

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

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

dichengyan0013的博客 989

华为od 面试八股文_C语言_02_含答案

华为od 面试八股文_C语言_02_含答案

MISAYAONE的博客 2230

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

springboot之RMI的使用

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

weixin_34064653的博客 875

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

NEU_LightBulb的博客 468

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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、付费专栏及课程。

余额充值