Skip to content

Commit 21de409

Browse files
committed
完全解耦传输层,将core完全剔除和Netty的强绑定关系
1 parent 8834cf2 commit 21de409

29 files changed

Lines changed: 119 additions & 54 deletions

File tree

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<module>rpc-common</module>
1414
<module>rpc-api</module>
1515
<module>rpc-core</module>
16+
<module>rpc-transport-netty</module>
1617
<module>rpc-provider</module>
1718
<module>rpc-consumer</module>
1819
</modules>

rpc-consumer/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
<groupId>com.xiaoyu.rpc</groupId>
2121
<artifactId>rpc-core</artifactId>
2222
</dependency>
23+
<dependency>
24+
<groupId>com.xiaoyu.rpc</groupId>
25+
<artifactId>rpc-transport-netty</artifactId>
26+
<version>${project.version}</version>
27+
</dependency>
2328
<dependency>
2429
<groupId>org.junit.jupiter</groupId>
2530
<artifactId>junit-jupiter</artifactId>

rpc-consumer/src/test/java/com/xiaoyu/rpc/consumer/FullIntegrationTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public String sayHello(String name) {
2020
public void testFullIntegration() throws InterruptedException {
2121
// Use Local Registry to avoid external dependency
2222
System.setProperty("rpc.registry", "local");
23+
System.setProperty("rpc.server-port", "9090"); // Use port 9090
2324
// Ensure we use KRYO or JSON/Hessian serializer that supports mundane Java
24-
// classes (String)
25-
// because Protobuf serializer requires Protobuf generated classes.
25+
// classes
2626
System.setProperty("rpc.serializer", "kryo");
2727

2828
// Start Server in a thread
@@ -39,7 +39,7 @@ public void testFullIntegration() throws InterruptedException {
3939
serverThread.setDaemon(true);
4040
serverThread.start();
4141

42-
Thread.sleep(2000); // Wait for server start
42+
Thread.sleep(5000); // Wait for server start (increased)
4343

4444
try {
4545
System.out.println("Starting Client...");

rpc-core/pom.xml

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
<artifactId>rpc-common</artifactId>
1818
</dependency>
1919

20-
<dependency>
21-
<groupId>io.netty</groupId>
22-
<artifactId>netty-all</artifactId>
23-
</dependency>
20+
<!-- No Netty Dependency Here! -->
21+
2422
<dependency>
2523
<groupId>org.projectlombok</groupId>
2624
<artifactId>lombok</artifactId>
@@ -29,6 +27,8 @@
2927
<groupId>ch.qos.logback</groupId>
3028
<artifactId>logback-classic</artifactId>
3129
</dependency>
30+
31+
<!-- Serialization -->
3232
<dependency>
3333
<groupId>com.esotericsoftware</groupId>
3434
<artifactId>kryo</artifactId>
@@ -41,31 +41,25 @@
4141
<groupId>org.yaml</groupId>
4242
<artifactId>snakeyaml</artifactId>
4343
</dependency>
44+
<dependency>
45+
<groupId>com.google.code.gson</groupId>
46+
<artifactId>gson</artifactId>
47+
<version>2.10.1</version>
48+
</dependency>
49+
50+
<!-- Registry -->
4451
<dependency>
4552
<groupId>com.alibaba.nacos</groupId>
4653
<artifactId>nacos-client</artifactId>
4754
</dependency>
55+
56+
<!-- Proxy -->
4857
<dependency>
4958
<groupId>net.bytebuddy</groupId>
5059
<artifactId>byte-buddy</artifactId>
5160
</dependency>
52-
<dependency>
53-
<groupId>io.grpc</groupId>
54-
<artifactId>grpc-netty-shaded</artifactId>
55-
</dependency>
56-
<dependency>
57-
<groupId>io.grpc</groupId>
58-
<artifactId>grpc-protobuf</artifactId>
59-
</dependency>
60-
<dependency>
61-
<groupId>io.grpc</groupId>
62-
<artifactId>grpc-stub</artifactId>
63-
</dependency>
64-
<dependency>
65-
<groupId>com.google.code.gson</groupId>
66-
<artifactId>gson</artifactId>
67-
<version>2.10.1</version>
68-
</dependency>
61+
62+
<!-- Testing -->
6963
<dependency>
7064
<groupId>org.junit.jupiter</groupId>
7165
<artifactId>junit-jupiter</artifactId>

rpc-core/src/main/java/com/xiaoyu/rpc/core/server/RpcServer.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,8 @@ public RpcServer() {
3131

3232
public <T> void register(Class<T> interfaceClass, T serviceImpl) {
3333
String serviceName = interfaceClass.getName();
34-
// 1. 本地注册 (仍然使用 NettyRpcHandler 的静态方法? 这里需要注意)
35-
// 为了兼容现有代码,NettyRpcHandler 仍然作为 Handler,但它的 handlerMap 是静态的
36-
// 理想情况下应该把 Handler 变成非静态的并传给 TransportServer
37-
// 但目前 NettyTransportServer 内部硬编码了 new NettyRpcHandler(),而 NettyRpcHandler 使用静态
38-
// map
39-
// 所以这里依然有效。后续应该优化 NettyRpcHandler 的状态管理。
40-
NettyRpcHandler.registerService(serviceName, serviceImpl);
34+
// 1. 本地注册 (使用 ServiceRepository 解耦)
35+
ServiceRepository.registerService(serviceName, serviceImpl);
4136

4237
// 2. 远程注册 (Nacos / Local)
4338
try {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.xiaoyu.rpc.core.server;
2+
3+
import java.util.Map;
4+
import java.util.concurrent.ConcurrentHashMap;
5+
6+
/**
7+
* 服务注册仓库
8+
* 用于存放本地已注册的服务实例
9+
*/
10+
public class ServiceRepository {
11+
12+
// 缓存服务实例: interfaceName -> serviceBean
13+
private static final Map<String, Object> SERVICE_MAP = new ConcurrentHashMap<>();
14+
15+
public static void registerService(String interfaceName, Object serviceBean) {
16+
SERVICE_MAP.put(interfaceName, serviceBean);
17+
}
18+
19+
public static Object getService(String interfaceName) {
20+
return SERVICE_MAP.get(interfaceName);
21+
}
22+
}

rpc-core/src/test/java/com/xiaoyu/rpc/core/extension/ExtensionLoaderTest.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.xiaoyu.rpc.common.serialization.Serializer;
55
import com.xiaoyu.rpc.core.loadbalancer.LoadBalancer;
66
import com.xiaoyu.rpc.core.client.ProxyFactory;
7-
import com.xiaoyu.rpc.core.protocol.Protocol;
7+
88
import com.xiaoyu.rpc.core.registry.ServiceRegistry;
99
import com.xiaoyu.rpc.core.registry.ServiceDiscovery;
1010

@@ -77,20 +77,6 @@ void testLoadBalancerExtensions() {
7777
assertEquals(2, extensions.size(), "Should have exactly 2 load balancer extensions");
7878
}
7979

80-
@Test
81-
@DisplayName("测试 Protocol 扩展加载")
82-
void testProtocolExtensions() {
83-
ExtensionLoader<Protocol> loader = ExtensionLoader.getExtensionLoader(Protocol.class);
84-
85-
assertNotNull(loader.getExtension("netty"), "Netty protocol should be loaded");
86-
assertNotNull(loader.getExtension("http"), "HTTP protocol should be loaded");
87-
assertNotNull(loader.getExtension("http2"), "HTTP2 protocol should be loaded");
88-
assertNotNull(loader.getExtension("grpc"), "gRPC protocol should be loaded");
89-
90-
var extensions = loader.getSupportedExtensions();
91-
assertEquals(4, extensions.size(), "Should have exactly 4 protocol extensions");
92-
}
93-
9480
@Test
9581
@DisplayName("测试 ProxyFactory 扩展加载")
9682
void testProxyFactoryExtensions() {

rpc-provider/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
<groupId>com.xiaoyu.rpc</groupId>
2121
<artifactId>rpc-core</artifactId>
2222
</dependency>
23+
<dependency>
24+
<groupId>com.xiaoyu.rpc</groupId>
25+
<artifactId>rpc-transport-netty</artifactId>
26+
<version>${project.version}</version>
27+
</dependency>
2328
</dependencies>
2429

2530
</project>

rpc-transport-netty/pom.xml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>grpc-demo</artifactId>
7+
<groupId>com.xiaoyu.rpc</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>rpc-transport-netty</artifactId>
13+
14+
<dependencies>
15+
<dependency>
16+
<groupId>com.xiaoyu.rpc</groupId>
17+
<artifactId>rpc-core</artifactId>
18+
<version>${project.version}</version>
19+
</dependency>
20+
<dependency>
21+
<groupId>io.netty</groupId>
22+
<artifactId>netty-all</artifactId>
23+
</dependency>
24+
<dependency>
25+
<groupId>org.projectlombok</groupId>
26+
<artifactId>lombok</artifactId>
27+
<scope>provided</scope>
28+
</dependency>
29+
<dependency>
30+
<groupId>ch.qos.logback</groupId>
31+
<artifactId>logback-classic</artifactId>
32+
</dependency>
33+
34+
<!-- gRPC Dependencies (Moved from rpc-core) -->
35+
<dependency>
36+
<groupId>io.grpc</groupId>
37+
<artifactId>grpc-netty-shaded</artifactId>
38+
</dependency>
39+
<dependency>
40+
<groupId>io.grpc</groupId>
41+
<artifactId>grpc-protobuf</artifactId>
42+
</dependency>
43+
<dependency>
44+
<groupId>io.grpc</groupId>
45+
<artifactId>grpc-stub</artifactId>
46+
</dependency>
47+
48+
<!-- Utils needed by protocols or handlers -->
49+
<dependency>
50+
<groupId>com.google.protobuf</groupId>
51+
<artifactId>protobuf-java</artifactId>
52+
</dependency>
53+
54+
<!-- Test Dependencies -->
55+
<dependency>
56+
<groupId>org.junit.jupiter</groupId>
57+
<artifactId>junit-jupiter</artifactId>
58+
<scope>test</scope>
59+
</dependency>
60+
</dependencies>
61+
62+
</project>

rpc-core/src/main/java/com/xiaoyu/rpc/core/client/ChannelProvider.java renamed to rpc-transport-netty/src/main/java/com/xiaoyu/rpc/core/client/ChannelProvider.java

File renamed without changes.

0 commit comments

Comments
 (0)