项目结构
maven
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sid.bigdata</groupId>
<artifactId>storm</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>storm</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<storm.version>1.1.1</storm.version>
<hadoop.version>2.6.0</hadoop.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>${storm.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
</project>
UserServer接口:提供具体需要被调用的方法的接口
package drpc;
/**
* @author liyijie
* @date 2018年6月11日下午3:06:28
* @email 37024760@qq.com
* @remark
* @version
*
* 用户的服务
*/
public interface UserService {
//序列化时的序列号
public static final long versionID = 111111;
/**
* addUser
* @Description: TODO(添加用户)
* @param @param name
* @param @param age 参数
* @return void 返回类型
*/
public void addUser(String name,int age);
}
UserServiceImpl实现接口,编辑要被远程调用的方法的具体逻辑
package drpc;
/**
* @author liyijie
* @date 2018年6月11日下午3:08:42
* @email 37024760@qq.com
* @remark
* @version
*
* 用户服务的接口实现类
*/
public class UserServiceImpl implements UserService{
public void addUser(String name, int age) {
System.out.println("From Server Invoked: add user success! name is "+name);
}
}
RPC Server 提供服务让远程客户端通过Server调用方法
package drpc;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;
/**
* @author liyijie
* @date 2018年6月11日下午3:10:24
* @email 37024760@qq.com
* @remark
* @version
*
* RPC服务
*/
public class RPCServer {
public static void main(String[] ars) throws Exception, IOException{
Configuration conf = new Configuration();
RPC.Builder builder = new RPC.Builder(conf);
Server server = builder.setProtocol(UserService.class)
.setInstance(new UserServiceImpl())
.setBindAddress("localhost")
.setPort(9999).build();
server.start();
}
}
RPC Client远程客户端,调用server提供的addUser方法
package drpc;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
/**
* @author liyijie
* @date 2018年6月11日下午3:16:34
* @email 37024760@qq.com
* @remark
* @version
*
* RPC的客户端
*/
public class RPCClient {
public static void main(String[] args)throws Exception{
Configuration conf = new Configuration();
//在本地拿到远程服务
UserService userService = RPC.getProxy(UserService.class,
111111,
new InetSocketAddress("localhost",9999), conf);
userService.addUser("sid", 27);
System.out.println("From client... invoked!");
RPC.stopProxy(userService);
}
}
先启动RPC Server
再启动RPC Client
再看Server的控制台显示