Java RMI

一. Java RMI概述

     RMI远程方法调用是计算机之间通过网络实现对象调用的一种通讯机制。使用这种机制,一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。

二.示例 

      1.先看下示例结构

              

       2. agent:是本地的意思;remote是远程服务端。

       3. 先看下远端服务包下的类:

               Service.java ---------------------->服务类的接口。 

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

/**
 * @Description: 服务接口(用于本地调用远端服务的代理接口和远端服务实现的接口)
 * @Author: zwh
 * @Date: 2019-08-17
 * @Time: 22:02
 */
public interface Service extends Remote {
    public String sayHello() throws RemoteException;
}

                ServiceImpl.java ---------------------->服务类接口实现类。  

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

/**
 * @Description:  远程端的业务实现
 * @Author: zwh
 * @Date: 2019-08-17
 * @Time: 22:05
 */
public class ServiceImpl extends UnicastRemoteObject implements Service {

    protected ServiceImpl() throws RemoteException {
    }

    @Override
    public String sayHello() throws RemoteException {
        System.out.println("远程调用成功");
        return "hello";
    }
}

                 main.java ---------------------->启动方法。

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

/**
 * @Description: 远程端注册服务到RMI
 * @Author: zwh
 * @Date: 2019-08-17
 * @Time: 22:07
 */
public class main {
    public static void main(String[] args) throws RemoteException, MalformedURLException {
        Service service = new ServiceImpl();
        LocateRegistry.createRegistry(8888);
        System.setProperty("java.rmi.server.hostname", "127.0.0.1");
        Naming.rebind("rmi://localhost:8888/RemoteService", service);
        System.out.println("远程服务ServiceImpl绑定成功!");
    }
}

       4. agent包下的类               

            ServiceClient.java ---------------------->启动方法。

/**
 * @Description: 本地客户端(通过调用本地代理service来调用远端服务的客户端)
 * @Author: zwh
 * @Date: 2019-08-17
 * @Time: 22:04
 */
public class ServiceClient{

    public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {
        Service remoteService = (Service) Naming.lookup("rmi://127.0.0.1:8888/RemoteService");
        System.out.println(remoteService.sayHello());
    }
}

三. 运行

      1.首先启动main类的主函数,使得Service可以注册到RMI

         

       2.这时就可以启动客户端,客户端通过RMI查找注册到服务,并通过找到的服务调用相应的方法,RMI再通过网络的方式调用远端服务相应的方法,再将数据通过网络返回给本地代理。

                    

       3.如果服务端在远程服务器上,则将本地ip改为服务器真实ip即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值