zoukankan      html  css  js  c++  java
  • RMI 实现的rpc 远程过程调用 Java


    在前面一片文章里面 ,简单的实现了keras  深度学习的数字识别程序代码 后 ,一直就在想 训练出来的模型怎么包装成SOA 服务使用,咨询了下京东 金融的同事 ,他们使用的是京东自己的soa 框架 jsf  ,还有就是当当网的dubbox  ,这个是源于阿里的dubbo。最近也看到一个朋友的简历上有很多关于dubbo 的描述 ,看来业界对这个还是情有独钟的 。


    搭建前面的jsf  和 dubbox  看起来不容易实现,所以想尝试 使用最简单的rpc 实现 ,因此才有了今天的rmi 的 codes  。这个code  还没有实现读取模型的操作 。是一个建议版本

    。未来是想实现server 端读取model ,client 读取一个28*28 的数字 ,调用server端的模型,计算数字本身的真实值 。



    定义一个借口 ,未来是要读取model的

    package com.jd.rmi.interfaces;
    
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    public interface  IService extends Remote{
        public String queryName(String no) throws RemoteException;
    }
    

    借口的实现codes


    package com.jd.rmi.Impl;
    
    import com.jd.rmi.interfaces.IService;
    
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    
    public class ServiceImpl extends UnicastRemoteObject implements IService{
    
    
        /**
         * @throws RemoteException
         */
    
        public ServiceImpl() throws RemoteException {
            super();
        }
    
        public String queryName(String no) throws RemoteException{
            // 方法的具体实现
            System.out.println("hello " + no);
            return String.valueOf("current timestamp is :"+ System.currentTimeMillis());
        }
    }
    

    上面的操作都是针对业务处理的逻辑

    下面是实现一个服务器端的server服务

    package com.jd.rmi.server;
    
    import com.jd.rmi.Impl.ServiceImpl;
    
    import java.rmi.AlreadyBoundException;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    
    public class Server {
    
        /**
         * RMI (Remote Method Invocation)
    
         RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。
         stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,
         远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,
         通过该机制RMI就好比它是本地工作,采用tcp/ip协议,
         客户端直接调用服务端上的一些方法。
         优点是强类型,编译期可检查错误,缺点是只能基于JAVA语言,客户机与服务器紧耦合
         * @param args
         */
    
        public static void main(String[] args){
    
            //Registration manager
            Registry registry = null;
    
            try {
               // registry = LocateRegistry.getRegistry("127.0.0.1" ,8088);
                registry = LocateRegistry.createRegistry(8088);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
    
            try {
                //create a server
                ServiceImpl server = new ServiceImpl();
                //server bind to registry
                registry.bind("Ethan",server);
                System.out.println("bind to server...");
            } catch (RemoteException e) {
                e.printStackTrace();
            } catch (AlreadyBoundException e) {
                e.printStackTrace();
            }
    
        }
    }
    

    有了服务器端,也就少不了client 端了


    package com.jd.rmi.client;
    
    import com.jd.rmi.interfaces.IService;
    
    import java.rmi.NotBoundException;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    
    public class client {
    
        public static void main(String[] args){
    
            Registry registry = null;
    
            try {
                //get server manager from host server
                registry = LocateRegistry.getRegistry("127.0.0.1",8088);
                // try list all registry
    
                String[] list = registry.list();
                for(String s : list){
                    System.out.println(s);
                }
    
            } catch (RemoteException e) {
                e.printStackTrace();
            }
    
            try {
               IService server = (IService)registry.lookup("Ethan");
               String resutl = server.queryName("beautiful moon 1");
               System.out.println("result from remote - " + resutl);
            } catch (RemoteException e) {
                e.printStackTrace();
            } catch (NotBoundException e) {
                e.printStackTrace();
            }
    
    
        }
    }
    



  • 相关阅读:
    开始学习编写用于 Windows SideShow 设备的小工具【转】
    Windows Mobile 6.5 Developer Tool Kit 下载
    Microsoft Security Essentials 微软免费杀毒软件下载
    SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (2)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (4)
    负载测试、压力测试和性能测试的异同
    Windows Server 2008 Vista Sidebar Gadget (侧边栏小工具) 入门开发实例
    Silverlight Tools 安装失败 解决办法
    SQL Server 2008 空间数据库 空间索引概念及创建(取自帮助)
  • 原文地址:https://www.cnblogs.com/TendToBigData/p/10501206.html
Copyright © 2011-2022 走看看