feat:(grpc): 添加Grpc启动失败检查机制

This commit is contained in:
opensnail 2024-09-15 20:24:29 +08:00
parent ad1dc33364
commit 2015f026e4

View File

@ -14,6 +14,7 @@
*/ */
package com.aizuda.snailjob.server; package com.aizuda.snailjob.server;
import com.aizuda.snailjob.server.common.rpc.server.GrpcServer;
import com.aizuda.snailjob.server.common.rpc.server.NettyHttpServer; import com.aizuda.snailjob.server.common.rpc.server.NettyHttpServer;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
@ -36,19 +37,23 @@ public class SnailJobServerApplication {
SpringApplication.run(SnailJobServerApplication.class, args); SpringApplication.run(SnailJobServerApplication.class, args);
} }
// @Bean @Bean
public ApplicationRunner nettyStartupChecker(NettyHttpServer nettyHttpServer, ServletWebServerFactory serverFactory) { public ApplicationRunner nettyStartupChecker(NettyHttpServer nettyHttpServer, GrpcServer grpcServer,
ServletWebServerFactory serverFactory) {
return args -> { return args -> {
// 判定Grpc或者Netty服务端是否正常启动
boolean started = nettyHttpServer.isStarted() || grpcServer.isStarted();
// 最长自旋10秒保证nettyHttpServer启动完成 // 最长自旋10秒保证nettyHttpServer启动完成
int waitCount = 0; int waitCount = 0;
while (!nettyHttpServer.isStarted() && waitCount < 100) { while (!started && waitCount < 100) {
log.info("--------> snail-job netty server is staring...."); log.info("--------> snail-job server is staring....");
TimeUnit.MILLISECONDS.sleep(100); TimeUnit.MILLISECONDS.sleep(100);
waitCount++; waitCount++;
started = nettyHttpServer.isStarted() || grpcServer.isStarted();
} }
if (!nettyHttpServer.isStarted()) { if (!started) {
log.error("--------> snail-job netty server startup failure."); log.error("--------> snail-job server startup failure.");
// Netty启动失败停止Web服务和Spring Boot应用程序 // Netty启动失败停止Web服务和Spring Boot应用程序
serverFactory.getWebServer().stop(); serverFactory.getWebServer().stop();
SpringApplication.exit(SpringApplication.run(SnailJobServerApplication.class)); SpringApplication.exit(SpringApplication.run(SnailJobServerApplication.class));