RPC框架一,RMI远程调用实例

news2024/10/7 5:27:44

RPC框架一,RMI远程调用实例

网上找了好久关于RMI调用的实例,大多都是本地调用的,远程调用的示例很少,所以自己整理一版。

首先 从server端开始

服务端###############

具体步骤:

1,写个RMI接口 MyRmiService.java

2,写个RMI接口实现 MyRmiServiceImpl.java

3,写个RMI服务端程序  RmiSeverTest.java(main方法,注意此类需要和RMI接口实现在同个包下,或者子包中,原因是接口实现的无参构造器是protected权限)

具体代码:

MyRmiService.java---------------------------------------------------------
package com.rmi.service;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface MyRmiService  extends Remote {
    public String sayHello () throws RuntimeException, RemoteException;
}

MyRmiServiceImpl.java----------------------------------------------------------------------------------

package com.rmi.service.impl;

import com.rmi.service.MyRmiService;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class MyRmiServiceImpl  extends UnicastRemoteObject implements MyRmiService {
    private static final long serialVersionUID = 1L;
    protected MyRmiServiceImpl() throws RemoteException {
        super();
    }
    @Override
    public String sayHello() throws RemoteException {
        return "Hello world";
    }
}
RmiSeverTest.java----------------------------------------------------------------------
package com.rmi.service.impl;

import com.rmi.service.MyRmiService;

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class RmiSeverTest {
    private static final String START_FAIL = "MyRmiService start error";
    private static final String START_SUCC = "MyRmiService start success";
    private static final int RMI_SERVER_PORT = 1099;
    private static final String RMI_SERVER_NAME ="rmi://10.206.66.166:1099/sayHello";
    private static final String START_INFO =",waste time(ms) ";

    public static void main(String[] args) {
        boolean runSucc = true;
        //创建服务
        long begintime = System.currentTimeMillis();
        try {
            LocateRegistry.createRegistry(RMI_SERVER_PORT);
            // 以下是向LocateRegistry注册(绑定/重绑定)RMI Server实现。
            MyRmiService myRmiService = new MyRmiServiceImpl();
            // 通过java 名字服务技术,可以讲具体的RMI Server实现绑定一个访问路径。注册到LocateRegistry中
            Naming.rebind(RMI_SERVER_NAME, myRmiService);

        } catch (Exception e) {
            runSucc = false;
            e.printStackTrace();
        }
        long endtime = System.currentTimeMillis();
        System.out.println((runSucc?START_SUCC:START_FAIL)+START_INFO +(endtime -begintime));
    }
}

启动main方法,则客户端正常启动了

现在我们就可以远程调用了,但是在写客户端代码之前我们需要准备客户端代理,

远程客户端############

生成客户端代理class  MyRmiServiceImpl_Stub.class----->具体步骤如下:

当前项目的target\classes目录下(C:\Users\zxx\IdeaProjects\testProject\target\classes)

执行cmd命令到控制台

在控制台执行命令 rmic com.rmi.service.MyRmiServiceImpl 生成MyRmiServiceImpl_Stub.class文件

命令行提示如下:

将项目打包为rmi-sub-1.0.0.jar (去除其他文件,仅保留必须的MyRmiService.class,MyRmiServiceImpl_Stub.class两个文件)

客户端导入此jar包,开始书写客户端调用类 ClientRmiTest.java

package com.rmi.test;

import com.rmi.service.MyRmiService;

import javax.naming.NamingException;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;


public class ClientRmiTest {
    public static void main(String[] args) throws NamingException, RemoteException, NotBoundException, MalformedURLException {
        System.out.println( ((MyRmiService) Naming.lookup("rmi://10.206.66.166/sayHello")).sayHello());
    }
}

执行main方法远程调用RMI服务

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【从零学Python基础】Python中的条件判断与循环

文章目录条件语句语法格式缩进和代码块空语句pass循环语句while循环for循环continue与break条件语句 条件语句能够表达如果...则...否则...这样的语义,这即是计算机基础中的逻辑判定,条件语句也叫分支语句 如果 我好好学习:   我一定会找到…

wav2lip:Accurately Lip-syncing Videos In The Wild

飞桨AI Studio - 人工智能学习与实训社区集开放数据、开源算法、免费算力三位一体,为开发者提供高效学习和开发环境、高价值高奖金竞赛项目,支撑高校老师轻松实现AI教学,并助力开发者学习交流,加速落地AI业务场景https://aistudio…

CUDA编程基础与Triton模型部署实践

作者:王辉 阿里智能互联工程技术团队 近年来人工智能发展迅速,模型参数量随着模型功能的增长而快速增加,对模型推理的计算性能提出了更高的要求,GPU作为一种可以执行高度并行任务的处理器,非常适用于神经网络的推理计算…

电脑有自带的录屏功能吗?电脑录屏如何录人脸

案例:所有电脑都有自带的录屏功能吗? “在网上了解到电脑有录屏功能,但是我在我的电脑上又找不到。想问问小伙伴们是所有的电脑都有自带的录屏功能吗?怎样才能找到电脑自带的录屏功能?” 在日常使用电脑时&#xff0…

在 Visual Studio 中设置指针星号的位置

作为一个完美主义者,如果写出来的代码,让自己感觉到不那么舒服,你需要好好研究研究,如何解决这个问题。 在写代码的过程中,我碰到了这样的一个小问题。 一直以来,我对指针的星号的位置比较敏感&#xff0…

为什么软件架构重要?

作者:[美]伦巴斯等第2章为什么软件架构重要如果架构是答案,那么问题是什么?本章主要从技术角度讨论为什么架构重要。我们将研究13个重要原因。你可以利用它们来推动新架构的创建,或者对已有系统架构进行分析和优化。1)架构可以抑制…

守正创新 聚力前行 助力量化行业高质量发展 | 峰会资料文末获取

4月1日下午,ACLUB 2023专题峰会在上海陆家嘴圆满举行,近80家业内领先机构逾百人参加会议,其中上海地区优秀量化私募管理人占比七成。 本届峰会主题为“守正创新 聚力前行——助力量化行业高质量发展”。监管机构、券商、行业专家、三方机构、…

耳朵总是听到嗡嗡的声音 这是为什么 该怎么办

为什么会莫名听到嗡嗡的声音,这是什么因素导致的,吃什么药能缓解? 耳鸣,是一种缺乏外部声源情况下,耳内或颅内出现的嗡嗡、嘶鸣、车笛、喇叭等不成形的异常声幻觉。这种情况可能是一种声音,也可能是多种声音…

day25—编程题

文章目录1.第一题1.1题目1.2涉及的相关知识1.3思路1.4解题2.第二题2.1题目2.2思路2.3解题1.第一题 1.1题目 描述: 星际战争开展了100年之后,NowCoder终于破译了外星人的密码!他们的密码是一串整数,通过一张表里的信息映射成最终…

在Node终端实现NewBing对话功能

目录 前言 准备工作 工作原理 功能设计 实现过程 基础概念 代理 请求 socket 控制台输入模块 配置文件 bingServer请求 bingSocket消息 子线程入口部分 主线程部分 工具函数 效果展示 写在最后 前言 ChatGPT在当下已然成为炙手可热的话题了,随着…

MAX14866 16通道高电压模拟开关(不需要高电压供电)

总体介绍 MAX14866 是一个16通道高电压模拟开关,主要用在超声应用的高压多路传输中。 每一个通道的状态可以由一个高速的SPI接口控制,最高时钟为30MHz 详细介绍 MAX14866 是一个单刀单掷开关,以下是等效电路图 MAX14866由一个带有16位串…

什么是Lambda表达式?

什么是Lambda表达式 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 匿名:它不像普通的方法那样有一个明确的名称&#xff1…

Ae:材质选项

在 Ae 中,一个图层开启 3D 之后,会多出几何选项 Geometry Options和材质选项 Material Options两个属性组。材质用于 3D 对象的表面,而材质选项就是这些表面的属性,支配着对象与光线交互的方式。展开材质选项的快捷键:…

数据结构入门-9-线段树字典树并查集

文章目录一、线段数Segment Tree1.1 线段树的优势1.1.2 数组实现线段树1.2 线段树结构1.2.1 创建线段树1.2.2 线段树中的区间查询1.2.3 线段树的更新二、字典树 Trie1.2 字典树结构1.2.1 创建Trie1.2.2 Trie查询三、并查集3.1 并查集的实现3.1.1 QuickFind3.1.1 QuickUnion初始…

事件触发模式 LT ET ?EPOLLIN EPOLLOUT 各种情况总结。【面试复盘】【学习笔记】

麻了,对 epoll 的触发机制理解不深刻…面试又被拷打了… 下面总结一下各种情况,并不涉及底层原理,底层原理看这里。 文章结构可以看左下角目录、 有什么理解的不对的,请大佬们指点。 先说结论,下面再验证&#xff…

WRF-UCM 高精度城市化气象动力模拟、WRF+WRF-UCM 模拟气象场

查看原文>>>(WRF-UCM)高精度城市化气象动力模拟技术与案例应用 目录 模型基础理论 模型平台从零安装讲解 城市模块在线耦合(WRFWRF-UCM)模拟案例讲解 WRFWRF-UCM如何模拟气象场 实际应用及案例分析 其他大气相关推…

PostgreSQL插件—数据恢复工具pg_recovery使用详解

说明 pg_recovery 是一款基于PostgreSQL的数据恢复工具。针对表做了 update/delete/rollback/dropcolumn 后的数据恢复。 版本支持 pg_revovery当前支持 PostgreSQL 12/13/14 。 安装 下载插件 墨天轮下载地址:https://www.modb.pro/download/434516github下载地…

吃鸡录屏怎么录到自己的声音 吃鸡录屏怎么隐藏按键

很多人在玩吃鸡游戏时喜欢将自己的游戏过程录制下来,特别是很多游戏主播会录制视频,录制后将视频分享到社交平台。但是在录制时经常会遇到很多问题,如声音、画面清晰度和完整性等。接下来就来分享一下吃鸡录屏怎么录到自己的声音,…

pytorch单机多卡训练

多卡训练的方式 以下内容来自知乎文章:当代研究生应当掌握的并行训练方法(单机多卡) pytorch上使用多卡训练,可以使用的方式包括: nn.DataParalleltorch.nn.parallel.DistributedDataParallel使用Apex加速。Apex 是 N…

嵌入式学习笔记汇总

本文整理STM32、STM8和uCOS-III的所有文章链接。 STM32学习笔记目录 源码:mySTM32-learn STM32学习笔记(1)——LED和蜂鸣器 STM32学习笔记(2)——按键输入实验 STM32学习笔记(3)——时钟系统 …