Skip to content

Commit

Permalink
调整目录结构,区分开socket和netty传输,为引入netty做准备
Browse files Browse the repository at this point in the history
  • Loading branch information
IAMPadA committed Feb 18, 2021
1 parent 8b71c6d commit b3d9814
Show file tree
Hide file tree
Showing 20 changed files with 116 additions and 56 deletions.
3 changes: 2 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.panda</groupId>
<artifactId>Panda-Rpc-Framework</artifactId>
<version>1.0-SNAPSHOT</version>
<version>2.0-SNAPSHOT</version>
<!-- 打包方式:pom用于父级或聚合工程中jar包的版本控制 -->
<packaging>pom</packaging>

Expand All @@ -23,6 +23,7 @@
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<netty-version>4.1.50.Final</netty-version>
</properties>

<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion rpc-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>Panda-Rpc-Framework</artifactId>
<groupId>com.panda</groupId>
<version>1.0-SNAPSHOT</version>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 2 additions & 0 deletions rpc-api/src/main/java/com/panda/rpc/api/HelloObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

Expand All @@ -13,6 +14,7 @@

//自动加上所有属性的get set toString hashCode equals方法
@Data
@NoArgsConstructor
//添加一个含有所有已声明字段属性参数的构造函数
@AllArgsConstructor

Expand Down
2 changes: 1 addition & 1 deletion rpc-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>Panda-Rpc-Framework</artifactId>
<groupId>com.panda</groupId>
<version>1.0-SNAPSHOT</version>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
8 changes: 5 additions & 3 deletions rpc-common/src/main/java/com/panda/rpc/entity/RpcRequest.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.panda.rpc.entity;

import lombok.Builder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

Expand All @@ -11,9 +12,10 @@
* @description 传输格式(传输协议):客户端向服务端传输的对象
*/
@Data
//使用创建者模式,一次性给所有变量初始赋值
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RpcRequest implements Serializable {

/**
* 待调用接口名称
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.panda.rpc.enumeration.ResponseCode;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

Expand All @@ -11,7 +12,10 @@
* @description 服务端处理完后,向客户端返回的对象
*/
@Data
@NoArgsConstructor
public class RpcResponse<T> implements Serializable {


/**
*响应状态码
*/
Expand Down
24 changes: 22 additions & 2 deletions rpc-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>Panda-Rpc-Framework</artifactId>
<groupId>com.panda</groupId>
<version>1.0-SNAPSHOT</version>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand All @@ -15,7 +15,27 @@
<dependency>
<groupId>com.panda</groupId>
<artifactId>rpc-common</artifactId>
<version>1.0-SNAPSHOT</version>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package com.panda.rpc.server;
package com.panda.rpc;

import com.panda.rpc.entity.RpcRequest;
import com.panda.rpc.entity.RpcResponse;
import com.panda.rpc.enumeration.ResponseCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.Socket;

/**
* @author [PANDA] 1843047930@qq.com
Expand Down
15 changes: 15 additions & 0 deletions rpc-core/src/main/java/com/panda/rpc/RpcClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.panda.rpc;

import com.panda.rpc.entity.RpcRequest;

/**
* @author [PANDA] 1843047930@qq.com
* @date [2021-02-18 17:50]
* @description 客户端类通用接口
*/
public interface RpcClient {

Object sendRequest(RpcRequest rpcRequest);

}

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.panda.rpc.client;
package com.panda.rpc;

import com.panda.rpc.entity.RpcRequest;
import org.slf4j.Logger;
Expand All @@ -16,12 +16,10 @@
public class RpcClientProxy implements InvocationHandler {

private static final Logger logger = LoggerFactory.getLogger(RpcClientProxy.class);
private String host;
private int port;
private final RpcClient client;

public RpcClientProxy(String host, int port){
this.host = host;
this.port = port;
public RpcClientProxy(RpcClient client) {
this.client = client;
}

//抑制编译器产生警告信息
Expand All @@ -34,15 +32,9 @@ public <T> T getProxy(Class<T> clazz){
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
logger.info("调用方法:{}#{}", method.getDeclaringClass().getName(), method.getName());
//客户端向服务端传输的对象,Builder模式生成,利用反射获取相关信息
RpcRequest rpcRequest = RpcRequest.builder()
.interfaceName(method.getDeclaringClass().getName())
.methodName(method.getName())
.parameters(args)
.paramTypes(method.getParameterTypes())
.build();
//进行远程调用的客户端
RpcClient rpcClient = new RpcClient();
return rpcClient.sendRequest(rpcRequest, host, port);
RpcRequest rpcRequest = new RpcRequest(method.getDeclaringClass().getName(),
method.getName(), args, method.getParameterTypes());
return client.sendRequest(rpcRequest);

}
}
12 changes: 12 additions & 0 deletions rpc-core/src/main/java/com/panda/rpc/RpcServer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.panda.rpc;

/**
* @author [PANDA] 1843047930@qq.com
* @date [2021-02-18 17:53]
* @description 服务端类通过接口
*/
public interface RpcServer {

void start(int port);

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ public class DefaultServiceRegistry implements ServiceRegistry{
/**
* key = 服务名称(即接口名), value = 服务实体(即实现类的实例对象)
*/
private final Map<String, Object> serviceMap = new ConcurrentHashMap<>();
private static final Map<String, Object> serviceMap = new ConcurrentHashMap<>();
/**
* 用来存放实现类的名称,Set存取更高效,存放实现类名称相比存放接口名称占的空间更小,因为一个实现类可能实现了多个接口,查找效率也会更高
*/
private final Set<String> registeredService = ConcurrentHashMap.newKeySet();
private static final Set<String> registeredService = ConcurrentHashMap.newKeySet();

@Override
public synchronized <T> void register(T service) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.panda.rpc.client;
package com.panda.rpc.socket.client;

import com.panda.rpc.RpcClient;
import com.panda.rpc.entity.RpcRequest;
import com.panda.rpc.entity.RpcResponse;
import com.panda.rpc.enumeration.ResponseCode;
Expand All @@ -16,13 +17,22 @@
/**
* @author [PANDA] 1843047930@qq.com
* @date [2021-02-04 17:20]
* @description 进行远程调用的客户端
* @description Socket方式进行远程调用的客户端
*/
public class RpcClient {
public class SocketClient implements RpcClient {

private static final Logger logger = LoggerFactory.getLogger(RpcClient.class);
private static final Logger logger = LoggerFactory.getLogger(SocketClient.class);

public Object sendRequest(RpcRequest rpcRequest, String host, int port) {
private final String host;
private final int port;

public SocketClient(String host, int port){
this.host = host;
this.port = port;
}

@Override
public Object sendRequest(RpcRequest rpcRequest){
/**
* socket套接字实现TCP网络传输
* try()中一般放对资源的申请,若{}出现异常,()资源会自动关闭
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.panda.rpc.server;
package com.panda.rpc.socket.server;

import com.panda.rpc.RequestHandler;
import com.panda.rpc.entity.RpcRequest;
import com.panda.rpc.entity.RpcResponse;
import com.panda.rpc.registry.ServiceRegistry;
Expand All @@ -14,7 +15,7 @@
/**
* @author [PANDA] 1843047930@qq.com
* @date [2021-02-18 11:38]
* @description 处理客户端RpcRequest的工作线程
* @description IO传输模式|处理客户端RpcRequest的工作线程
*/
public class RequestHandlerThread implements Runnable {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.panda.rpc.server;
package com.panda.rpc.socket.server;

import com.panda.rpc.RpcServer;
import com.panda.rpc.registry.ServiceRegistry;
import com.panda.rpc.RequestHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -12,11 +14,11 @@
/**
* @author [PANDA] 1843047930@qq.com
* @date [2021-02-05 11:34]
* @description 进行远程调用连接的服务端
* @description Socket方式进行远程调用连接的服务端
*/
public class RpcServer {
public class SocketServer implements RpcServer {

private static final Logger logger = LoggerFactory.getLogger(RpcServer.class);
private static final Logger logger = LoggerFactory.getLogger(SocketServer.class);

private static final int CORE_POOL_SIZE = 5;
private static final int MAXIMUM_POOL_SIZE = 50;
Expand All @@ -26,7 +28,7 @@ public class RpcServer {
private RequestHandler requestHandler = new RequestHandler();
private final ServiceRegistry serviceRegistry;

public RpcServer(ServiceRegistry serviceRegistry){
public SocketServer(ServiceRegistry serviceRegistry){
this.serviceRegistry = serviceRegistry;
/**
* 设置上限为100个线程的阻塞队列
Expand All @@ -45,6 +47,7 @@ public RpcServer(ServiceRegistry serviceRegistry){
* @return [void]
* @date [2021-02-05 11:57]
*/
@Override
public void start(int port){
try(ServerSocket serverSocket = new ServerSocket(port)){
logger.info("服务器启动……");
Expand Down
6 changes: 3 additions & 3 deletions test-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>Panda-Rpc-Framework</artifactId>
<groupId>com.panda</groupId>
<version>1.0-SNAPSHOT</version>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand All @@ -15,12 +15,12 @@
<dependency>
<groupId>com.panda</groupId>
<artifactId>rpc-core</artifactId>
<version>1.0-SNAPSHOT</version>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.panda</groupId>
<artifactId>rpc-api</artifactId>
<version>1.0-SNAPSHOT</version>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package com.panda.test;

import com.panda.rpc.RpcClientProxy;
import com.panda.rpc.api.HelloObject;
import com.panda.rpc.api.HelloService;
import com.panda.rpc.client.RpcClientProxy;
import com.panda.rpc.socket.client.SocketClient;

/**
* @author [PANDA] 1843047930@qq.com
* @date [2021-02-05 14:50]
* @description 测试用客户端
*/
public class TestClient {
public class SocketTestClient {

public static void main(String[] args) {
SocketClient client = new SocketClient("127.0.0.1", 9000);
//接口与代理对象之间的中介对象
RpcClientProxy proxy = new RpcClientProxy("127.0.0.1", 9000);
RpcClientProxy proxy = new RpcClientProxy(client);
//创建代理对象
HelloService helloService = proxy.getProxy(HelloService.class);
//接口方法的参数对象
Expand Down
Binary file not shown.
Loading

0 comments on commit b3d9814

Please sign in to comment.