什么是RPC
RPC(Remote Procedure Call)远程过程调用,简单来说是一个服务请求另一个服务提供的数据。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
大概的流程图
代码实现
1. 新建rpc_server模块,在server模块下面创建server_api和server_provider
api提供一些公共的方法,provider主要是服务端的一些处理逻辑
2. 编写api模块
添加一个公共方法接口和一个RPC请求参数对象
package com.xjp.rpc;
/**
* @Description
* @Author XJP
* @Date 2020-04-24 21:53
*/
public interface IHelloServer {
String sayHello(String s);
}
package com.xjp.rpc;
import java.io.Serializable;
import java.util.Arrays;
/**
* @Description
* @Author XJP
* @Date 2020-04-25 9:29
*/
public class RpcRequest implements Serializable {
private String className;
private String methodName;
private Object[] parameters;
private Class[] types;
//添加get和set,toString方法
}
4. 编写provider
1. 实现IHelloServer接口
加入api的pom依赖
<dependency>
<groupId>org.example</groupId>
<artifactId>rpc_server_api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
package com.xjp.impl;
import com.xjp.rpc.IHelloServer;
/**
* @Description
* @Author XJP
* @Date 2020-04-24 21:55
*/
public class HelloServerImpl implements IHelloServer {
@Override
public String sayHello(String s) {
System.out.println("Rpc Start");
return "hello: " + s;
}
}
2. rpc服务端代理
创建RpcProxyServer 类,通过一个线程池,通过线程池异步处理请求
package com.xjp;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @Description
* @Author XJP
* @Date 2020-04-25 9:05
*/
public class RpcProxyServer {
public void publisher(Object service, int port)