Java 远程方法调用(RMI)

什么是RMI

RMI是Java的一组拥护开发分布式应用程序的API。

RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。

简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,由于J2EE是分布式程序平台,它一RMI机制实现程序组件在不同操作系统之间的通信。

创建IBaseHello接口

package org.marker.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;
/**
 * 远程调用方法接口
 * @author marker
 * */
public interface IBaseHello extends Remote {

    String sayhello() throws RemoteException; 

}

创建实现IBaseHello接口类

package org.marker.rmi;

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

/**
 * 远程方法调用实现类
 * @author marker
 * */
public class HelloImpl extends UnicastRemoteObject implements IBaseHello {

    private static final long serialVersionUID = 1L;

    /**
     * 构造方法
     * */
    protected HelloImpl() throws RemoteException {
    }

    /**
     * 实现sayHello方法
     * */
    @Override
    public String sayhello() throws RemoteException {
        return new String("Hello World!");
    }

}

创建远程调用方法服务端

package org.marker.rmi;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

/**
 * RMI服务端
 * @author marker
 * */
public class HelloServer {

    public static void main(String[] args) {
        try {
            //注册端口4500
            Registry registry = LocateRegistry.createRegistry(4500);
            //创建实现类对象
            HelloImpl helloserver = new HelloImpl();
            //绑定访问实现类对象
            registry.rebind("helloserver", helloserver);
            System.out.println("helloserver server start!");

        }  catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

创建远程方法调用客户端

package org.marker.rmi;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

/**
 * 远程方法调用客户端
 * @author marker
 * */
public class HelloClient {

    public static void main(String[] args) {
        try {
            //登录服务端获取注册类
            Registry registry = LocateRegistry.getRegistry("127.0.0.1",4500);
            //通过调用绑定字符串调用接口实现类对象
            IBaseHello hello=(IBaseHello)registry.lookup("helloserver");
            //通过接口调用实现类的sayhello方法
            String message = hello.sayhello();
            System.out.println(message);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

运行服务端打印出: helloserver server start!

运行客户端打印出: Hello World!

来源: 雨林博客(www.yl-blog.com)