zoukankan      html  css  js  c++  java
  • Java RMI远程调用实例

    1.定义服务接口,服务接口必须继承java.rmi.Remote,服务方法必须抛出java.rmi.RemoteException.

    package rmi.service;
    
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    import java.util.HashMap;
    
    /**
     * //定义服务接口,服务接口必须继承java.rmi.Remote,服务方法必须抛出java.rmi.RemoteException.
     * @author Administrator
     */
    public interface IRemoteService extends Remote {
    
        public String sayHello(String name) throws RemoteException;
    
        public HashMap<String,Object> getHero(String name) throws RemoteException;
    
    }
    

    2.提供服务实现类,服务实现类继承了java.rmi.server.UnicastRemoteObject,而其构造方法抛出异常,所以服务实现类必须显示给出构造方法并抛出异常.

    package rmi.service.impl;
    
    
    import rmi.service.IRemoteService;
    
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    import java.util.HashMap;
    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * //提供服务实现类,服务实现类继承了java.rmi.server.UnicastRemoteObject,
     * 而其构造方法抛出异常,所以服务实现类必须显示给出构造方法并抛出异常.
     * @author Administrator
     */
    public class RemoteServiceImpl extends UnicastRemoteObject implements IRemoteService {
    
        private static final long serialVersionUID = -1817498005094186816L;
    
        public RemoteServiceImpl() throws RemoteException {
    
        }
    
        @Override
        public String sayHello(String name) throws RemoteException {
            System.out.println("Hello " + name + "啊!");
            return "Hello " + name + "!";
        }
    
        @Override
        public HashMap<String,Object> getHero(String name) throws RemoteException {
            HashMap<String,Object> map = new HashMap<String,Object>();
            map.put("id",new AtomicInteger().incrementAndGet());
            map.put("name",name);
            return map;
        }
    }
    

    3.发布服务。也就是将服务实现类注册到RMI服务注册表中。

    package rmi;
    
    /**
     * //发布服务。也就是将服务实现类注册到RMI服务注册表中。
     * @author Administrator
     */
    import rmi.service.IRemoteService;
    import rmi.service.impl.RemoteServiceImpl;
    
    import java.rmi.Naming;
    import java.rmi.registry.LocateRegistry;
    
    public class RemotePublish {
        public static void main(String[] args) throws Exception {
    
            // 创建RMI服务注册表
            LocateRegistry.createRegistry(8888);
    
            IRemoteService rs = new RemoteServiceImpl();
    
            // 将服务实现类的实例发布到指定端口并命名为rservice,等待远程调用
            Naming.bind("rmi://localhost:8888/rservice", rs);
        }
    }
    

    4.定义客户调用接口,注意必须与服务端路径保持一致。

    package rmi.service;
    
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    import java.util.HashMap;
    
    /**
     * //定义服务接口,服务接口必须继承java.rmi.Remote,服务方法必须抛出java.rmi.RemoteException.
     * @author Administrator
     */
    public interface IRemoteService extends Remote {
    
        public String sayHello(String name) throws RemoteException;
    
        public HashMap<String,Object> getHero(String name) throws RemoteException;
    
    }
    

    5.客户端通过RMI协议对发布好的服务器端口进行调用

    package rmi;
    
    
    import rmi.service.IRemoteService;
    
    import java.rmi.Naming;
    import java.util.HashMap;
    
    /**
     * 客户端通过RMI协议对发布好的服务器端口进行调用
     */
    public class ClientTest {
        public static void main(String[] args) throws Exception {
    
            // 从远程获取名称为rservice的服务实现类
            long start=System.currentTimeMillis();
            IRemoteService rs = (IRemoteService) Naming.lookup("rmi://localhost:8888/rservice");
            String say = rs.sayHello("world");
            System.out.println(say);
    
            HashMap<String,Object> hero = rs.getHero("张三");
    
            System.out.println(hero.toString());
    
            start=System.currentTimeMillis()-start;
            System.out.println(start);
        }
    }
    

      

     

    制定计划、物质驱动、立即执行、反复提醒、阶段反馈、输出博客
  • 相关阅读:
    windows 查看端口被占用
    IOC控制反转
    spring配置,spring中的bean 的id不能相同
    prototype 用法
    js闭包用法
    struts2异常处理,global-results定义全局结果处理
    struts2中错误处理
    Struts2配置细节
    hql查询语句 内存中的情况,fetch迫切查询关键字
    Spring cloud微服务安全实战-4-5搭建OAuth2认证服务器
  • 原文地址:https://www.cnblogs.com/wxseng/p/15073283.html
Copyright © 2011-2022 走看看