文档章节

Java RMI 远程调用简易教程

最爱肉肉
 最爱肉肉
发布于 2016/10/04 10:00
字数 542
阅读 78
收藏 0
点赞 0
评论 0

这里分三步来讲,讲的比较繁琐.也是希望不会的人能尽可能看得懂.会的肯定不会看.OK,开始.

第一部分:服务器(生产者) 需要定义一个远程接口,以及实现该接口的类.

1.公共接口.

package com.pan.rmi.interf;

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

/**
 * Created by pan on 2016/10/4.
 */
public interface ServiceRemote extends Remote {
    //远程需要用到的方法
    String doSomething() throws RemoteException;
}

2.服务端实现接口(远程调用的类)

package com.pan.rmi.impl;

import com.pan.rmi.interf.ServiceRemote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/**
 * Created by pan on 2016/10/4.
 */
public class ServiceImple extends UnicastRemoteObject implements ServiceRemote {


    /**
     * 初始化抛出异常
     * @throws RemoteException
     * @since JDK1.1
     */
    public ServiceImple() throws RemoteException {
    }


    @Override
    public String doSomething() throws RemoteException {
        System.out.println("Service: A method is called !");
        return "Service doSomething .";
    }
}

3.启动服务端

package com.pan.rmi;

import com.pan.rmi.impl.ServiceImple;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

/**
 * Created by pan on 2016/10/4.
 */
public class Main {


    public static void main(String[] args) {
        try {
            ServiceImple service = new ServiceImple();
            //注册方法一
//            Registry registry = LocateRegistry.createRegistry(9889) ;
//            registry.rebind("myRemote", service);
            //注册方法二
            LocateRegistry.createRegistry(6600);
            Naming.rebind("rmi://127.0.0.1:6600/myRemote", service);
            System.out.println("服务器启动成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

第二步:(将接口打包到客户端程序,可以用jar本地包,也可以使用maven本地仓库.)

第三步:(客户端代码调用服务端的方法)

package com.pan.rmi.client;


import com.pan.rmi.interf.ServiceRemote;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

/**
 * Created by pan on 2016/10/4.
 */
public class ClientImpl {

    public static void main(String[] args) {
        try {
            //获取远程服务,这里注意一下端口必须跟服务端设置的一致
            ServiceRemote remote = (ServiceRemote) Naming.lookup("rmi://127.0.0.1:6600/myRemote");
            //调用远程方法
            String s = remote.doSomething();
            //输出
            System.out.println("客户端接受消息:" + s);
        } catch (NotBoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }


}

测试结果:

1.客户端

客户端接受消息:Service doSomething .

Process finished with exit code 0

2.服务端

服务器启动成功!
Service: A method is called !

 

 

题外:

RMI是Java内置的一种比较简单的远程调用方式,类是的还有apache的http远程调用.一般用于分布式服务器框架的proxy层,java作为一门高级语言.目前来说socket编程都比较的繁琐,更相对于底层通信(例如tcp/ip协议算法更是...),所以,一般来说都是使用成熟的框架去实现我们的需求.

© 著作权归作者所有

共有 人打赏支持
最爱肉肉
粉丝 3
博文 50
码字总数 34967
作品 0
深圳
程序员
RMI:Java中的分布式计算框架

RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实...

qq_39521554 ⋅ 05/15 ⋅ 0

J2EE中一些常用的名词【简】

web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,W...

anlve ⋅ 06/18 ⋅ 0

JDK工具jstatd用法详解(转)

jstatd,即虚拟机的jstat守护进程,主要用于监控JVM的创建与终止,并提供一个接口允许远程监控工具依附到在本地主机上运行的JVM。 用法摘要 jstatd [ options ] 命令行选项。这些选项可以是任...

easonjim ⋅ 2017/09/06 ⋅ 0

编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting ⋅ 06/15 ⋅ 0

Oracle Java Mission Control 帮助

缩写 含义 JDK Java 开发工具包 JDP Java Discovery Protocol JFR Java 飞行记录器 JMC Java Mission Control JMX Java Management Extensions JVM Java 虚拟机 MBean 托管 Bean (Java) RCP ......

光斑 ⋅ 04/27 ⋅ 0

WebLogic反序列化漏洞(CVE-2018-2628)漫谈

  漏洞简介   2018年4月18日,Oracle官方发布了4月份的安全补丁更新CPU(Critical Patch Update),更新中修复了一个高危的 WebLogic 反序列化漏洞CVE-2018-2628。攻击者可以在未授权的情...

FreeBuf ⋅ 04/26 ⋅ 0

Java NIO AsynchronousFileChannel

原文链接 , 原文作者:Jakob Jenkov, 翻译:Neil Hao 在Java 7,AsynchronousFileChannel 被添加到了Java NIO中。使用AsynchronousFileChannel可以实现异步地读取和写入文件数据。 创建一个A...

Neil_Hao ⋅ 01/20 ⋅ 0

《Spring技术内幕》学习笔记18——Spring使用Hessian实现远程调用

Spring目前提供了对RMI、 HttpInvoker、Hessian、Burlap及WebService等Remoting技术的集成。Spring屏蔽了这些实现技术的差异,用户只需开发简单的Java对象(Plain Old Java Objects,POJO)然后...

谜男amu ⋅ 05/16 ⋅ 0

ZooKeeper学习笔记八 ZooKeeper典型应用场景——命名服务

《从Paxos到ZooKeeper分布式一致性原理与实践》 电子工业出版社 命名服务是分布式系统中比较常见的一类场景。命名服务是分布式系统最基本的公共服务之一。在分布式系统中,被命名的实体通常可...

xundh ⋅ 05/02 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Netweaver和SAP云平台的quota管理

Netweaver 以需要为一个用户上下文(User Context)能够在SAP extended memory区域中分配内存尺寸创建quota为例。 对于Dialog工作进程,使用事务码修改参数 ztta/roll_extension_dia. 对于非D...

JerryWang_SAP ⋅ 16分钟前 ⋅ 0

IDEA提示编码速度

焦点移动 将焦点冲代码编辑窗口移动到菜单栏:Alt+菜单栏带下划线字母 将焦点从工具窗口移动到代码编辑窗口 Esc或Shift+Esc 将焦点从代码编辑移动到最近使用的工具窗口 F12 模板提示 Ctrl+J...

bithup ⋅ 25分钟前 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 49分钟前 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 56分钟前 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

python3.6 安装pyhook_3

我的是在win下的,忙了半天老是安装不了, pip install 也不行。 那么可以看出自己的版本是32bit 一脸懵逼 没办法 只好下载32版本的来安装 我一直以为 是 对应32 位的 。 下面是 小例子 http...

之渊 ⋅ 今天 ⋅ 0

004、location正则表达式

1、location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。 2、location的语法 = 开头表示精确匹配 ^~...

北岩 ⋅ 今天 ⋅ 0

CentOS7 静默安装 Oracle 12c

环境 CentOS7.5 最小安装 数据库软件 linuxx64_12201_database.zip 操作系统配置 关闭 SELinux sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config 关闭防火墙 systemctl disable ......

Colben ⋅ 今天 ⋅ 0

Yii2中findAll()的正确使用姿势/返回为空的处理办法

从一次错误的操作开始 $buildingObject = Building::findAll("status=1"); 1 这个调用看着没有任何毛病,但是在使用时返回的结果却是一个空数组。再回过头来看看数据表中: 按照套路来讲,查...

dragon_tech ⋅ 今天 ⋅ 0

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部