1.Project Directory
Server端
Client端
服务端和客户端所在包(就是项目内路径:比如org.fool.hadoop.rpc)必须一致,否则会出现如下错误
2. Maven Dependency
<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>org.fool.hadoop</groupId> <artifactId>hadoop</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>hadoop</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <hadoop.version>2.6.4</hadoop.version> </properties> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>${hadoop.version}</version> </dependency> <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>1.8</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath> </dependency> </dependencies> </project>
3.Server端代码
LoginService.java
package org.fool.hadoop.rpc; public interface LoginService { public static final long versionID = 1L; public String login(String username, String password); }
LoginServiceImpl.java
package org.fool.hadoop.rpc; public class LoginServiceImpl implements LoginService { @Override public String login(String username, String password) { return username + " logged in successfully!"; } }
Starter.java
package org.fool.hadoop.rpc; import java.io.IOException; import org.apache.hadoop.HadoopIllegalArgumentException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Builder; import org.apache.hadoop.ipc.RPC.Server; public class Starter { public static void main(String[] args) throws HadoopIllegalArgumentException, IOException { Builder builder = new RPC.Builder(new Configuration()); builder.setBindAddress("hadoop-000").setPort(10000).setProtocol(LoginService.class) .setInstance(new LoginServiceImpl()); Server build = builder.build(); build.start(); } }
4.Client端代码
LoginService.java
package org.fool.hadoop.rpc; public interface LoginService { public static final long versionID = 1L; public String login(String username, String password); }
LoginController.java
package org.fool.hadoop.rpc; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; public class LoginController { public static void main(String[] args) throws IOException { LoginService proxy = RPC.getProxy(LoginService.class, 1L, new InetSocketAddress("hadoop-000", 10000), new Configuration()); String result = proxy.login("hadoop", "RPC"); System.out.println(result); } }
5.启动Starter后,运行LoginController