使用RMI实现RPC

news/2024/5/18 13:06:33/文章来源:https://blog.csdn.net/listeningdu/article/details/128198495

1 RMI简介

RMI(Remote Method Invocation) 远程方法调用。

RMI是从JDK1.2推出的功能,它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用(JVM)中的内容。

RMI 是Java语言的远程调用,无法实现跨语言。

2 执行流程

 

Registry(注册表)是放置所有服务器对象的命名空间。 每次服务端创建一个对象时,它都会使用bind()或rebind()方法注册该对象。 这些是使用称为绑定名称的唯一名称注册的。

要调用远程对象,客户端需要该对象的引用。即通过服务端绑定的名称从注册表中获取对象(lookup()方法)。

3 API介绍

3.1 Remote

java.rmi.Remote 定义了此接口为远程调用接口。如果接口被外部调用,需要继承此接口。

public interface Remote{}

3.2 RemoteException

java.rmi.RemoteException

继承了Remote接口的接口中,如果方法是允许被远程调用的,需要抛出此异常。

3.3 UnicastRemoteObject

java.rmi.server.UnicastRemoteObject

此类实现了Remote接口和Serializable接口。

自定义接口实现类除了实现自定义接口还需要继承此类。

3.4 LocateRegistry

java.rmi.registry.LocateRegistry

可以通过LocateRegistry在本机上创建Registry,通过特定的端口就可以访问这个Registry。

3.5 Naming

java.rmi.Naming

Naming定义了发布内容可访问RMI名称。也是通过Naming获取到指定的远程方法。

4 代码实现

4.1 服务端创建

创建RmiServer项目

4.1.1 编写接口

com.msb.service.DemoService 编写

public interface DemoService extends Remote {String demo(String demo) throws RemoteException;
}

4.1.2 编写实现类

com.msb.service.impl.DemoServiceImpl 编写。

注意:构造方法是public的。默认生成protected

public class DemoServiceImpl extends UnicastRemoteObject implements DemoService {public DemoServiceImpl() throws RemoteException {}@Overridepublic String demo(String demo) throws RemoteException {return demo+"123";}
}

4.1.3 编写主方法

编写com.msb.DemoServer类,生成主方法

public class DemoServiceImpl extends UnicastRemoteObject implements DemoService {public DemoServiceImpl() throws RemoteException {}@Overridepublic String demo(String demo) throws RemoteException {return demo+"123";}
}

4.1.4 运行项目

运行后项目,项目一直处于启动状态,表示可以远程访问此项目中的远程方法。

4.2 创建客户端代码

创建项目RmiClient

4.2.1 复制服务端接口

把服务端com.msb.service.DemoService粘贴到项目中

4.2.2 创建主方法类

新建com.msb.DemoClient

public class DemoServiceImpl extends UnicastRemoteObject implements DemoService {public DemoServiceImpl() throws RemoteException {}@Overridepublic String demo(String demo) throws RemoteException {return demo+"123";}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_231188.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

元宇宙工程系,来了一位“吃螃蟹”者

转自《中国科学报》 记者 温才妃 潘志庚(右)给学生讲授元宇宙技术。受访者供图 元宇宙办学潮正在高校中暗涌。 不久前,南京信息工程大学人工智能学院(未来技术学院)信息工程系正式更名为元宇宙工程系,成为…

Kubernetes v1.25 搭建单节点集群用于Debug K8S源码

参考说明 参考自:v1.25.0-CentOS-binary-install-IPv6-IPv4-Three-Masters-Two-Slaves.md,按照自己的理解修改了下。 搭建好的单节点v1.25.4版本集群 1. 集群环境准备 1.1. 主机规划 IP主机名主机角色操作系统安装组件192.168.11.71k8s-master1maste…

HTML网页设计【足球科普】学生DW静态网页设计

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

02-SpringBoot基础

一、回顾 二、知识目标 SpringBoot概述【了解】 SpringBoot快速入门【掌握】 SpringBoot启动原理【重点】 SpringBoot配置文件【掌握】 SpringBoot属性注入【掌握】 三、为什么使用SpringBoot? -SSM开发有哪些痛点? 1、在早期我们都是使用的是SSM来…

1.Spring概述(Spring官方文档总结)

目录 1.1jdk环境依赖 1.2 Spring介绍 1.3 Spring历史 1.4 设计理念 1.1 jdk环境依赖 从Spring Framework 5.1开始,Spring需要JDK 8 (Java SE 8),并提供对JDK 11 LTS的开箱即用支持。建议将Java SE 8 update 60作为Java 8的最低补丁版本,但…

磁盘和文件系统管理(一)

检测并确认新硬盘 fdisk命令 查看或管理磁盘分区 fdisk -l [磁盘设备] 或 fdisk [磁盘设备] 交互模式中的常用指令 m、p、n、d、t、w、q d delete a partition * 删除分区 g create a new empty GPT partition table 创建一个新的空的GPT分区表(可以对大于2T磁盘进行分区) l…

如何安装Ambari集群_大数据培训

注意:以下操作主节点操作即可 1 制作本地源 制作本地源是因为在线安装Ambari太慢。制作本地源只需在主节点上进行。 1.1 配置HTTPD 服务 配置HTTPD 服务到系统层使其随系统自动启动 [roothadoop102 ~]# chkconfig httpd on [roothadoop102 ~]# service httpd …

【Opencv实战】高手勿入,Python使用Opencv+Canny实现边缘检测以及轮廓检测(详细步骤+源码分享)

前言 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 在这次的案例实战中,我们将使用Python 3和OpenCV。我们将使用OpenCV,因为它是…

私域运营对于企业的重要性

企业进行私域流量的精细化运营,不仅可以打造属于企业自己的社群王国,还可以挖掘存量客户的价值,实现更智能的客户管理和个性化运营方案。 前言 相信每个人都对瑞幸咖啡略有耳闻,这个国产咖啡品牌曾一度被封神,但随着财…

感知算法工程师面试===目标检测===YOLO V4(改)

感觉V3 到V4,YOLO的整体架构并没有重大的改进,只是增加了很多的trick 先展示一下V4的整体网络结构 ↑\uparrow↑这个是对比V3的 如图可见,V4的结构依然是主干网络金字塔头部检测器,所有的改进都是为了更好更快的检测目标。 ↑\…

(四)Spring Security Oauth2.0 源码分析--客户端端鉴权(token校验)

一 引言 在上篇文章我们分析了token的获取过程,那么拿到token后,将token放在请求头中进行资源的访问,客户端是如如何对token进行解析的呢,本文带你走进token校验的源码解析,基本流程如下所示 客户端向资源服务器发起请求时,在请求头Authorization携带申请的token请求被Filte…

均匀传输线的串扰和饱和长度

下图为串扰的电路模型,动态线与静态线之间通过互容与互感联系,这样也说明了动态线的信号耦合到静态线上的条件是存在di/dt或者dv/dt时,也就是说只在信号边沿上产生串扰,当电压或者电流为常数的时候静态线上就不会有串扰的信号。 信…

Redis04:Redis事务操作以及后续高级部分

Redis事务操作以及后续高级部分Redis事务事务执行Redis实现乐观锁Redis事务 Redis事务本质:一组命令的集合!一个事务中的所有命令都会被序列化,在事务执行过程中,会按顺序执行! Redis单条命令是保证原子性的&#xff…

为什么在高速PCB设计当中信号线不能多次换孔

大家在进行PCB设计时过孔肯定是要接触的,那么大家知道过孔对于我们PCB的信号质量影响有多大吗? 在搞清楚上面这个这个问题之前我们先给大家介绍一下我们在PCB设计时过孔应该如何选取。 一般过孔种类有以下三种可以进行选择:(单位是…

Bug系列路径规划算法原理介绍(四)——I-BUG 算法

本系列文章主要对Bug类路径规划算法的原理进行介绍,在本系列的第一篇文章中按照时间顺序梳理了自1986年至2018年Bug类路径规划算法的发展,整理了13种BUG系列中的典型算法,从本系列的第二篇文章开始依次详细介绍了其中具有代表性的BUG1、BUG2、…

四种区块链底层技术形态的对比解读

新世纪以来,互联网技术快速发展,催生了以平台经济为典型的各种新业态、新模式,深刻影响和改变了人类社会的生产方式、生活方式和社会治理方式。然而在推动经济和社会发展的同时,基于数据点对点传输建立的互联网也越来越多地暴露出…

[附源码]计算机毕业设计基于springboot在线影院系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

OpenCV入门(C++/Python)- 使用OpenCV标注图像(六)

使用OpenCV标注图像用颜色线标注图像绘制圆绘制实心圆绘制矩阵绘制椭圆绘制带轮廓和填充半椭圆使用文本注释图像为图像和视频添加标注的目的不止一个,包含:向视频中添加信息在对象检测的情况下,在对象周围绘制边界框,用不同颜色的…

获取鼠标在画布中的位置

获取鼠标在画布中的位置 效果展示 概述 本文讲解如何实现我们平时用的画布软件中&#xff0c;怎么获取的我们鼠标时刻在画布中的位置。 构建HTML框架 <body><div class"box"></div> </body>CSS样式 <style>.box {/* 设置盒子…

超市商城小程序开发,在线盈利途径

随着消费意识的提高和零售业的不断升级&#xff0c;小程序已经成为目前重要的线上发展形势之一且具有很强的发展活力&#xff0c;在此发展机遇下&#xff0c;很多企业开始布局线上渠道&#xff0c;进入电商行业。超市作为日常生活中最常见、数量最多的线下门店&#xff0c;当然…