美文网首页
RMI, 远程方法调用

RMI, 远程方法调用

作者: halfempty | 来源:发表于2021-12-02 10:04 被阅读0次

RMI = Remote Method Invocation, 远程方法调用机制: 允许一个JVM对象调用另一个JVM对象方法
这种机制特别适合分布式应用, 比如JMeter的分布式压测

1. 架构图

  • RMI registry, 命名空间, 供server注册
  • RMI server, 具体的实现, 被调用的对象
  • RMI client, 从registry的命名空间中查找注册的方法, 实现远程调用
image.png

2. 样例

角色之前的关系如下, 代码逻辑大体一致


image.png

2.1. 定义远程调用接口

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

/**
 * 定义Adder接口, 继承Remote对象
 */
public interface Adder extends Remote {

    int add(int x, int y) throws RemoteException;
}

2.2. Server实现

启动server端程序, 可以发现监听端口1099, 8801 (二者进程号一致)

image.png
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

/**
 * 1. 实现Adder接口
 * 2. 向registry注册
 */
public class AdderServer implements Adder {

    @Override
    public int add(int x, int y) throws RemoteException {
        return x + y;
    }

    public static void main(String[] args) {
        try {
            Adder adder = new AdderServer();
            // Server服务监听8801端口, 等待client请求
            Remote adderStub = UnicastRemoteObject.exportObject(adder, 8801);

            // registry监听端口1099, 注册server方法
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.rebind("Adder", adderStub);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

2.3. Client实现

  • 通过ip + port连接registry服务
  • 在registry上查找server注册的方法
  • 然后直接调用
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {

    public static void main(String[] args) {
        try {
            Registry registry = LocateRegistry.getRegistry("localhost", 1099);
            Adder adder = (Adder) registry.lookup("Adder");

            int result = adder.add(13, 14);
            System.out.println(result);
        } catch (RemoteException | NotBoundException e) {
            e.printStackTrace();
        }
    }
}

相关文章

  • spring05-RMI---G05

    spring05-RMI 一. 远程方法调用 RMI Java RMI 指的是远程方法调用 (Remote Met...

  • 分布式架构基础:Java RMI详解

    RMI简介 ​ Java RMI,即 远程方法调用(Remote Method Invocation),...

  • Java RMI服务搭建

    什么是RMI? RMI:远程方法调用(Remote Method Invocation)。 如何建立RMI服务? ...

  • 远程部署的RMI

    RMI Java的远程程序调用(Remote Method Invocation,RMI)技术 对方法的直接调用,...

  • 关于RPC

    1.RMI RMI(Remote Method Invocation,远程方法调用),RMI使用Java语言接口定...

  • JAVA RMI深度结论

    JAVA RMI是什么? Java RMI 指的是远程方法调用 (Remote Method Invocation...

  • Java RMI之HelloWorld篇

    Java RMI之HelloWorld篇 Java RMI 指的是远程方法调用 (Remote Method In...

  • java RMI基本原理

    定义 RMI(Remote Method Invoke远程方法调用),为远程方法调用,是允许运行在一个Java虚拟...

  • java分布式处理技术

    RMI和JNDI是分布式处理的基础,RMI远程方法调用,负责分布式方法调用;JNDIjava命名和目录接口,用于更...

  • 【程序员笔记】RMI使用笔记

    本文章共分为三部分 RMI简介 RMI原理 RMI使用 RMI实战 下面详细介绍 一 RMI简介 远程方法调用(R...

网友评论

      本文标题:RMI, 远程方法调用

      本文链接:https://www.haomeiwen.com/subject/zelyxrtx.html