博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Hadoop提供的RPC API实现简单的RPC程序
阅读量:7156 次
发布时间:2019-06-29

本文共 3343 字,大约阅读时间需要 11 分钟。

[toc]


利用Hadoop提供的RPC API实现简单的RPC程序

在Hadoop中提供了RPC服务的使用API,通过其API地使用,可以非常简单地构建远程过程调用程序,下面就给出一个简单的实例。

项目结构

为了方便操作,所有的代码都放在本地一个项目中,实际上,完全可以将代码放在不同的服务器上,这是RPC的概念,这里就不做过多的介绍。

项目结构如下:

rpc/├── HelloServiceImpl.java├── IHelloService.java├── RPCClientDriver.java└── RPCServerDriver.java

程序代码

这里只是做一个简单的示例,并且代码中也给出了非常详细的注释,所以直接给出程序代码。

IHelloService.java

package com.uplooking.bigdata.rpc;import org.apache.hadoop.ipc.VersionedProtocol;/** * 接口 * 要想使用hadoop提供的RPC服务,必须要继承VersionedProtocol */public interface IHelloService extends VersionedProtocol {    public long versionID = 1L;    public String sayHi(String name);    public String hearBeat(String beat);}

HelloServiceImpl.java

package com.uplooking.bigdata.rpc;import org.apache.hadoop.ipc.ProtocolSignature;import java.io.IOException;/** * HelloService服务实现类 */public class HelloServiceImpl implements IHelloService {    public String sayHi(String name) {        System.out.println("name..." + name);        return "Hi, " + name;    }    public String hearBeat(String beat) {        System.out.println("----heartbeat----" + beat);        return System.currentTimeMillis() + "--->" + beat;    }    public long getProtocolVersion(String protocol, long clientVersion) throws IOException {        return versionID;    }    public ProtocolSignature getProtocolSignature(String protocol, long clientVersion, int clientMethodsHash) throws IOException {        return new ProtocolSignature();    }}

RPCServerDriver.java

package com.uplooking.bigdata.rpc;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import java.io.IOException;/** * RPC服务端程序,启动并发布服务 */public class RPCServerDriver {    public static void main(String[] args) throws IOException {        // 创建RPC的配置        Configuration configuration = new Configuration();        // 构建RPC的builder对象        RPC.Builder builder = new RPC.Builder(configuration);        // 设置RPC Server的信息,返回一个server对象        RPC.Server server = builder.setBindAddress("localhost")                .setPort(4893)                .setProtocol(IHelloService.class)                .setInstance(new HelloServiceImpl())                .build();        // 启动RPC Server        // 这是一个守护进程,所以main函数不会退出        server.start();        System.out.println("---服务启动了---");    }}

RPCClientDriver.java

package com.uplooking.bigdata.rpc;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import java.io.IOException;import java.net.InetAddress;import java.net.InetSocketAddress;/** * RPC客户端程序 */public class RPCClientDriver {    public static void main(String[] args) throws IOException {        // 构建InetSocketAddress对象        InetSocketAddress address = new InetSocketAddress(InetAddress.getByName("localhost"), 4893);        // 通过RPC.getProxy方法获得代理对象        /**         * @param protocol      接口的类型对象         * @param clientVersion 版本号         * @param addr          服务端地址         * @param conf          配置信息         */        IHelloService helloServiceProxy = RPC.getProxy(IHelloService.class, IHelloService.versionID, address, new Configuration());        String result = helloServiceProxy.sayHi("小秋田");        System.out.println(result);    }}

测试

启动RPCServerDriver,输出如下:

---服务启动了---

启动RPCClicentDriver,输出如下:

Hi, 小秋田

此时再查看服务端的输出:

---服务启动了---name...小秋田

这样的话,通过使用Hadoop提供的RPC API,就实现了一个简单的RPC程序。

转载于:https://blog.51cto.com/xpleaf/2074362

你可能感兴趣的文章
【转载】VIEW层AJAX提交表单到Controller的实体(AJAX传递序列化的输入元素
查看>>
文字即艺术
查看>>
【Programming Clip】位运算的应用
查看>>
安装oracle时内核参数详解
查看>>
SQL压力测试用的语句和相关计数器
查看>>
Tomcat中显示目录的配置
查看>>
linux技巧33条
查看>>
.NET对存储过程的调用抽象封装
查看>>
discuz!版本号信息改动步骤
查看>>
Swift2.0下UICollectionViews拖拽效果的实现
查看>>
C# 读取EXCEL文件的三种经典方法
查看>>
为什么mysql设置了密码之后,本地还可以直接访问,不需要输入密码就可以登录数据库了?...
查看>>
SQL学习之联结表的使用
查看>>
联合查询(查找所有分类及其父类)
查看>>
JSTL判断list的size()大小
查看>>
谁说技术男没有人文情怀:当旅途遇到生命赞歌
查看>>
Implement Queue using Stacks(用栈实现队列)
查看>>
从终端获取一个字符串,分别统计当中大写字母、小写字母、数字及其他字符的个数。...
查看>>
leetCode(51):Valid Palindrome
查看>>
React进阶之高阶组件
查看>>