zoukankan      html  css  js  c++  java
  • Java通过Hadoop实现RPC通讯简单实例

    准备pom文件中的maven依赖:jar包

    <!--ipc通信模块-->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.5</version>
    </dependency>

    一、定义server端代码

    1.定义一个接口,该接口继承org.apache.hadoop.ipc.VersionedProtocol接口

    import org.apache.hadoop.ipc.VersionedProtocol;
    
    /**
     * 1.服务器定义接口
     */
    public interface HelloServer extends VersionedProtocol {
        //版本号--用于通信暗号
        long versionID= 123L;
        String sayHello(String name);
    }

    2.定义实现以上接口的实现类

    import org.apache.hadoop.ipc.ProtocolSignature;
    
    import java.io.IOException;
    
    /**
     * 2.定义接口实现类
     */
    public class HelloServiceImpl implements HelloServer {
        public String sayHello(String name) {
            return "hello: "+name;
        }
    
        public long getProtocolVersion(String s, long l) throws IOException {
            return versionID;
        }
    
        public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {
            return null;
        }
    }
    

    3.测试开启一个服务端:用于暴露端口

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    
    import java.io.IOException;
    
    /**
     * 暴露接口
     */
    public class HelloService {
        public static void main(String[] args) throws IOException {
            HelloServiceImpl instance = new HelloServiceImpl();
            // 创建一个RPC builder
            RPC.Builder builder = new RPC.Builder(new Configuration());
    
            //指定RPC Server的参数
            builder.setBindAddress("localhost");
            builder.setPort(7788);
    
            //将自己的程序部署到server上
            builder.setProtocol(HelloServer.class);
            builder.setInstance(instance);
    
            //创建Server
            RPC.Server server = builder.build();
    
            //启动服务
            server.start();
            System.out.println("server is start");
        }
    }

    二、客户端代码

    import java.io.IOException;
    import java.net.InetSocketAddress;
    
    public class HelloClient {
        public static void main(String[] args) throws IOException {
            /**
             * HelloServer:服务端接口类
             * 123L:通信发暗号
             * InetSocketAddress:服务端地址
             * Configuration:
             */
            HelloServer proxy = RPC.getProxy(HelloServer.class, 123L, new InetSocketAddress("localhost", 7788), new Configuration());
            String result = proxy.sayHello("tom");
            System.out.println("结果是: "+result);
    
        }
    }

    三、测试

    首先开启服务端--HelloService

    开启客户端-提交任务--HelloClient

  • 相关阅读:
    4.异常捕获后再次抛出
    图像滤镜处理算法:灰度、黑白、底片、浮雕
    JAVA层和JNI层实现Bitmap图镜像功能。
    关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
    镜象变换的源代码
    android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
    android获取项目下的一张图片的绝对路径问题以及解决方法
    fwrite用法
    关于毁灭地球
    memset,memcpy
  • 原文地址:https://www.cnblogs.com/pigdata/p/10305581.html
Copyright © 2011-2022 走看看