• RMI


    • RPC:Remote procedure call protocal,远程过程调用协议,一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输访问远端系统资源  (RPC协议其实是一个规范)。主流的RPC协议有:Dubbo、Thrif、RMI、Webservice、Hessain    (远程过程调用框架),网络协议和网络IO对于调用端和服务端来说是透明(动态代理)。

                         

                     

    • 参考:https://www.jianshu.com/p/5b90a4e70783
    • RMI:Remote Method Invocation ,远程方法调用,可以认为是RPC的java版本,使用的是JRMP(Java Remote Messageing Protocol), JRMP是专门为java定制的通信协议,所以它是纯java的分布式解决方案。
    • 实现一个RMI程序步骤:
      • 创建远程接口,并且继承java.rmi.Remote接口并抛出网络传输异常(throws RemoteException)。
    1 package com.karat.cn.rmi;
    2 
    3 import java.rmi.Remote;
    4 import java.rmi.RemoteException;
    5 
    6 public interface ISayHello extends Remote{
    7 
    8     public String sayHello(String name) throws RemoteException;
    9 }
    View Code
      • 创建一个实现类实现远程接口,并且继承:UnicastRemoteObject,实现类的构造方法抛出网络传输异常。
     1 package com.karat.cn.rmi;
     2 
     3 import java.rmi.RemoteException;
     4 import java.rmi.server.UnicastRemoteObject;
     5 
     6 
     7 public class SayHelloImpl extends UnicastRemoteObject implements ISayHello{
     8 
     9     public SayHelloImpl() throws RemoteException {
    10     }
    11 
    12     public String sayHello(String name) throws RemoteException {
    13         return "Hello "+name;
    14     }
    15 }
    View Code
      • 创建服务器程序(服务端):createRegistry方法注册远程对象。
     1 package com.karat.cn.rmi;
     2 
     3 import java.net.MalformedURLException;
     4 import java.rmi.AlreadyBoundException;
     5 import java.rmi.Naming;
     6 import java.rmi.RemoteException;
     7 import java.rmi.registry.LocateRegistry;
     8 
     9 public class HelloServer {
    10 
    11     public static void main(String[] args) {
    12         try {
    13             ISayHello hello=new SayHelloImpl();
    14 
    15             LocateRegistry.createRegistry(8888);
    16 
    17             Naming.bind("rmi://localhost:8888/sayHello",hello);
    18 
    19             System.out.println("server start success");
    20         } catch (RemoteException e) {
    21             e.printStackTrace();
    22         } catch (MalformedURLException e) {
    23             e.printStackTrace();
    24         } catch (AlreadyBoundException e) {
    25             e.printStackTrace();
    26         }
    27     }
    28 }
    View Code
      • 创建客户端程序(消费端)。
     1 package com.karat.cn.rmi;
     2 
     3 import java.net.MalformedURLException;
     4 import java.rmi.Naming;
     5 import java.rmi.NotBoundException;
     6 import java.rmi.RemoteException;
     7 
     8 
     9 public class HelloClient {
    10 
    11     public static void main(String[] args){
    12         try {
    13             ISayHello hello=(ISayHello) Naming.lookup("rmi://localhost:8888/sayHello");
    14             System.out.println(hello);
    15             System.out.println(hello.sayHello("hello, AAAA"));
    16         } catch (NotBoundException e) {
    17             e.printStackTrace();
    18         } catch (MalformedURLException e) {
    19             e.printStackTrace();
    20         } catch (RemoteException e) {
    21             e.printStackTrace();
    22         }
    23     }
    24 }
    View Code
  • 相关阅读:
    实战演示 H5 性能分析
    测试开发工资为什么这么高?
    战胜测试内卷转型测试开发,拿名企offer最多的班型是如何设计的
    接口协议之抓包分析 TCP 协议
    面试 | 如果测试时间不够,你会怎么办?
    史上最全 Appium 自动化测试从入门到框架实战精华学习笔记(三)
    容器技术 Docker & K8S 在测试场景中的经典应用实战
    实战演练基于加密接口测试测试用例设计
    技术风向标 | 云原生技术架构成熟度模型解读
    期待已久的 RocketMQ Summit 等待你的参与!
  • 原文地址:https://www.cnblogs.com/LJing21/p/10442172.html
Copyright © 2020-2023  润新知