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

STM32实战:如何用GPS信号同时同步海康摄像头和Livox Mid-360雷达(附完整接线图)

本文详细介绍了如何利用STM32实现GPS信号分频,同步海康摄像头和Livox Mid-360雷达的时间同步方案。通过硬件架构设计、STM32信号处理核心实现及设备接口规范,解决了多传感器数据融合中的时间对齐难题,适用于自动驾驶和机器人导航领域。

weixin_29182481的博客 596

Android以太网开关流程分析

Android以太网开关流程分析 一、引言   在Android 以太网服务启动流程中我们启动了EthernetService(ES),NetworkManagementService(NMS)等服务,其中ES作为Binder的服务端,向客户端EthernetManger提供了调用接口的引用。因此,应用可以通过EthernetManger来访问以太网的相关接口。本篇文章将从APP调用以太网的使能和关闭的接口流程作为切入点来分析,以太网框架中,上层app是如何将指令传递到底层。图1-1所示为以太网使能和关闭

franc521的博客 6113

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

LVDS接口总结--(0)LVDS硬件电路接口

xilinx LVDS接口硬件总结

zidan1412的博客 9720

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

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

qq_18244417的博客 893

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1879

搞定ESD(二):ESD干扰机理分析

大家好,我是记得诚。上文介绍了ESD的基本知识,对ESD的测试标准进行了解析,包括静电发生器的介绍,实验布置要求,静电放电实验的实施及判定等内容。本文主要介绍ESD的干扰机理。

记得诚 4298

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

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

Lyndon的专栏 563

Open3D点云算法与点云深度学习案例汇总(长期更新)

Open3D-python算法专栏文章汇总,长期更新算法原理与实战案例。

纵马踏花向自由 7467

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

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

dichengyan0013的博客 989

下采样新突破!ADown模块让YOLOv11多尺度特征提取更精准

ADown 凭借可编程梯度信息与多分支特征聚合的创新设计,打破了传统下采样在特征保留上的固有局限。本教程从原理到代码实现,再到工业场景适配,完整呈现了其在 YOLOv11 中的集成路径。只需简单新增模块脚本并修改配置文件,你的目标检测模型就能在多尺度特征捕捉能力上实现跨越式提升——无论是学术研究中的小目标检测突破,还是工业场景下的复杂多尺度任务落地,ADown 都能成为你攻克下采样瓶颈的利器。现在就动手尝试,让你的检测模型在下一代下采样技术的创新中再上一个台阶吧。

know_F0727的博客 524

手把手教你学Simulink--基础电机控制场景实例:基于Simulink的无刷直流电机六步换相仿真

摘要:本文详细介绍了基于Simulink的无刷直流电机(BLDC)六步换相仿真方法。文章首先阐述了BLDC六步换相控制的原理,包括霍尔传感器定位、六步换相逻辑和方波电流驱动三大支柱。然后通过电动工具(角磨机)应用场景,展示了如何在Simulink中搭建完整的六步换相系统:从主电路构建、霍尔信号生成、Stateflow换相逻辑实现到开环电压控制。仿真结果显示该系统具有低成本优势(仅需霍尔传感器),但存在±20%转矩脉动。文章还提供了核心代码实现,包括霍尔信号生成、六步换相状态机和转矩分析脚本,并对比了六步换相

MHD0815的博客 149

springboot之RMI的使用

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

weixin_34064653的博客 875

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

NEU_LightBulb的博客 468

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

计算机控制技术及应用

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

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

余额充值