zoukankan      html  css  js  c++  java
  • RMI简介

    RMI实现RPC

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

    执行流程

    API介绍

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

    public interface Remote()

    RemoteException

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

    UnicastRemoteObject

    java.rmi.server.UnicastRemoteObject,实现了Remote接口和Serializable接口

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

    locateRegistry

    java.rmi.reegistry.LocateRegistry

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

    Naming

    java.rmi.Naming

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

    代码实现

    接口类

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

    接口实现类、服务端和客户端

    public class DemoServiceImpl extends UnicastRemoteObject implements DemoService{    
        public DemoServiceImpl() throws RemoteException{
    
        }    
    
        public String demo(String param) throws RemoteException{
            return param + "abc";
        }
    }
    
    public class DemoServer{
        public static void main(String[] args){
            try{
                // 创建接口实例
                DemoServie demoService = new DemoServiceImpl();
                // 创建注册表
                LocateRegistry.createRegistry(8989);
                // 绑定服务
                Naming.bind("rmi://localhost:8989/demoService", demoService);
                System.out.println("绑定服务成功!");
            }catch(RemoteException e){
                e.printStackTrace();
            }catch(AlreadyBoundException e){
                e.printStackTrace();
            }catch(MalformedURLException e){
                e.printStackTrace();
            }
        }    
    }
    
    public class ClientDemo{
        public static void main(String[] args){
            try{
                Remote lookup = Naming.lookup("rmi://localhost:8989/demoService");
                String result = demoService.demo("test");
                System.out.println(result);
            }catch(RemoteException e){
                e.printStackTrace();
            }catch(AlreadyBoundException e){
                e.printStackTrace();
            }catch(MalformedURLException e){
                e.printStackTrace();
            }        
        }
    }

     

    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    [git] push.default is unset
    [daily][qemu][libvirt] 使用libvirt管理qemu
    [development] __attribute__((weak))是干嘛的
    [daily] 使用左右对比查看diff 格式的文件
    [daily] 主机间目录共享
    [daily][qemu][kvm] 使用virtfs在host与guest之间共享目录
    [development][thrift] RPC框架 thrift
    [daily] 像tcpdump一样监听unix domain socket
    [daily][cgroup] 使用cgroup限制进程的CPU占用
    [qemu] qemu旧的net参数已经不再可用了,新的这样用。
  • 原文地址:https://www.cnblogs.com/YC-L/p/14357635.html
Copyright © 2011-2022 走看看