Skip to content

Commit 41d313b

Browse files
committed
feat:引入shutdownGracefully()来进行优雅下线,保护存量任务执行完毕
1 parent d726c31 commit 41d313b

4 files changed

Lines changed: 26 additions & 0 deletions

File tree

rpc-core/src/main/java/com/xiaoyu/rpc/core/registry/LocalRegistry.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,10 @@ public InetSocketAddress lookupService(String serviceName) {
1919
System.out.println("LocalRegistry: Looking up " + serviceName);
2020
return SERVICES.get(serviceName);
2121
}
22+
23+
@Override
24+
public void clearRegistry() {
25+
SERVICES.clear();
26+
System.out.println("LocalRegistry: Cleared all services.");
27+
}
2228
}

rpc-core/src/main/java/com/xiaoyu/rpc/core/registry/ServiceRegistry.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,9 @@ public interface ServiceRegistry {
1616
* @param inetSocketAddress 服务地址
1717
*/
1818
void registerService(String serviceName, InetSocketAddress inetSocketAddress);
19+
20+
/**
21+
* 注销所有服务 (用于优雅下线)
22+
*/
23+
void clearRegistry();
1924
}

rpc-core/src/main/java/com/xiaoyu/rpc/core/registry/nacos/NacosServiceRegistry.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@ public void registerService(String serviceName, InetSocketAddress inetSocketAddr
2222
throw new RuntimeException("注册服务失败", e);
2323
}
2424
}
25+
26+
@Override
27+
public void clearRegistry() {
28+
NacosUtils.clearRegistry();
29+
}
2530
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ public RpcServer() {
2727
// 获取传输层实现
2828
Transport transport = ExtensionLoader.getExtensionLoader(Transport.class).getExtension(config.getTransport());
2929
this.transportServer = transport.createServer(this.serverPort);
30+
31+
// 注册 JVM 关闭挂钩 (优雅下线)
32+
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
33+
log.info("检测到 JVM 关闭信号,正在执行优雅下线...");
34+
// 1. 注销服务 (防止新流量进入)
35+
serviceRegistry.clearRegistry();
36+
// 2. 关闭网络层 (处理完存量请求)
37+
transportServer.stop();
38+
log.info("优雅下线完成。");
39+
}));
3040
}
3141

3242
public <T> void register(Class<T> interfaceClass, T serviceImpl) {

0 commit comments

Comments
 (0)