Fallback and go on when nacos server down
This commit is contained in:
@@ -116,6 +116,8 @@ fizz:
|
||||
code-field: "msgCode"
|
||||
message-field: "message"
|
||||
|
||||
fast-fail-when-registry-center-down: false
|
||||
|
||||
# dedicated-line:
|
||||
# server:
|
||||
# enable: true
|
||||
|
||||
@@ -63,7 +63,7 @@ public abstract class PropertiesUtils {
|
||||
|
||||
public static void setBeanPropertyValue(Object bean, Properties properties, Map<String, Class<?>> propertyTypeHint) {
|
||||
BeanWrapperImpl beanWrapper = new BeanWrapperImpl(bean);
|
||||
for (String propertyName : properties.stringPropertyNames()) {
|
||||
/*for (String propertyName : properties.stringPropertyNames()) {
|
||||
if (beanWrapper.isWritableProperty(propertyName)) {
|
||||
beanWrapper.setPropertyValue(propertyName, properties.get(propertyName));
|
||||
} else if (propertyTypeHint != null) {
|
||||
@@ -77,6 +77,24 @@ public abstract class PropertiesUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
properties.forEach(
|
||||
(n, v) -> {
|
||||
String propertyName = (String) n;
|
||||
if (beanWrapper.isWritableProperty(propertyName)) {
|
||||
beanWrapper.setPropertyValue(propertyName, properties.get(propertyName));
|
||||
} else if (propertyTypeHint != null) {
|
||||
int dotPos = propertyName.lastIndexOf(Consts.S.DOT);
|
||||
if (dotPos > -1) {
|
||||
String prefix = propertyName.substring(0, dotPos);
|
||||
Class<?> aClass = propertyTypeHint.get(prefix);
|
||||
if (aClass != null && Map.class.isAssignableFrom(aClass)) {
|
||||
String newPropertyName = prefix + PropertyAccessor.PROPERTY_KEY_PREFIX_CHAR + propertyName.substring(dotPos + 1) + PropertyAccessor.PROPERTY_KEY_SUFFIX_CHAR;
|
||||
beanWrapper.setPropertyValue(newPropertyName, properties.get(propertyName));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package we.util;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* @author hongqiaowei
|
||||
@@ -39,4 +40,10 @@ public abstract class ReflectionUtils extends org.springframework.util.Reflectio
|
||||
makeAccessible(f);
|
||||
return getField(f, target);
|
||||
}
|
||||
|
||||
public static Object invokeMethod(String method, Object target, Object... args) {
|
||||
Method m = findMethod(target.getClass(), method);
|
||||
makeAccessible(m);
|
||||
return invokeMethod(m, target, args);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,6 +122,13 @@ public class SystemConfig {
|
||||
|
||||
private String fizzDedicatedLineClientId;
|
||||
|
||||
@Value("${fizz.fast-fail-when-registry-center-down:false}")
|
||||
private boolean fastFailWhenRegistryCenterDown;
|
||||
|
||||
public boolean isFastFailWhenRegistryCenterDown() {
|
||||
return fastFailWhenRegistryCenterDown;
|
||||
}
|
||||
|
||||
public int fizzDedicatedLineClientRequestTimeout() {
|
||||
return fizzDedicatedLineClientRequestTimeout;
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package we.dedicated_line;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -50,15 +51,20 @@ public class DedicatedLineInfoService {
|
||||
@Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE)
|
||||
private ReactiveStringRedisTemplate rt;
|
||||
|
||||
@Value("${fizz.dedicated-line.client.enable:true}")
|
||||
private boolean fizzDedicatedLineClientEnable;
|
||||
|
||||
@PostConstruct
|
||||
public void init() throws Throwable {
|
||||
Result<?> result = initDedicatedLineInfo();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
}
|
||||
result = lsnApiPairingInfoChange();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
if (fizzDedicatedLineClientEnable) {
|
||||
Result<?> result = initDedicatedLineInfo();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
}
|
||||
result = lsnApiPairingInfoChange();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ package we.dedicated_line;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
|
||||
import org.springframework.http.HttpMethod;
|
||||
@@ -54,15 +55,20 @@ public class DedicatedLineService {
|
||||
@Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE)
|
||||
private ReactiveStringRedisTemplate rt;
|
||||
|
||||
@Value("${fizz.dedicated-line.server.enable:true}")
|
||||
private boolean fizzDedicatedLineServerEnable;
|
||||
|
||||
@PostConstruct
|
||||
public void init() throws Throwable {
|
||||
Result<?> result = initDedicatedLine();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
}
|
||||
result = lsnDedicatedLineChange();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
if (fizzDedicatedLineServerEnable) {
|
||||
Result<?> result = initDedicatedLine();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
}
|
||||
result = lsnDedicatedLineChange();
|
||||
if (result.code == Result.FAIL) {
|
||||
throw new RuntimeException(result.msg, result.t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
|
||||
import lombok.SneakyThrows;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.env.OriginTrackedMapPropertySource;
|
||||
@@ -30,6 +31,7 @@ import org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.env.MapPropertySource;
|
||||
import org.springframework.core.env.PropertySource;
|
||||
import we.config.SystemConfig;
|
||||
import we.service_registry.FizzServiceRegistration;
|
||||
@@ -53,15 +55,22 @@ public class DedicatedLineServiceRegistration implements ApplicationListener<Ded
|
||||
|
||||
private FizzServiceRegistration fizzServiceRegistration;
|
||||
|
||||
@Value("${fizz.dedicated-line.client.enable:true}")
|
||||
private boolean fizzDedicatedLineClientEnable;
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void onApplicationEvent(DedicatedLineWebServerInitializedEvent event) {
|
||||
|
||||
if (!fizzDedicatedLineClientEnable) {
|
||||
return;
|
||||
}
|
||||
|
||||
ReactiveWebServerApplicationContext applicationContext = event.getApplicationContext();
|
||||
ConfigurableEnvironment env = applicationContext.getEnvironment();
|
||||
|
||||
String prefix = SystemConfig.FIZZ_DEDICATED_LINE_CLIENT_PREFIX + ".service-registration";
|
||||
boolean eureka = env.containsProperty((prefix + ".eureka.instance.appname"));
|
||||
boolean eureka = env.containsProperty((prefix + ".eureka.client.serviceUrl.defaultZone"));
|
||||
boolean nacos = env.containsProperty((prefix + ".nacos.discovery.server-addr"));
|
||||
|
||||
if (eureka || nacos) {
|
||||
@@ -69,8 +78,9 @@ public class DedicatedLineServiceRegistration implements ApplicationListener<Ded
|
||||
Properties eurekaProperties = new Properties();
|
||||
boolean find = false;
|
||||
for (PropertySource<?> propertySource : env.getPropertySources()) {
|
||||
if (propertySource instanceof OriginTrackedMapPropertySource) {
|
||||
OriginTrackedMapPropertySource originTrackedMapPropertySource = (OriginTrackedMapPropertySource) propertySource;
|
||||
// if (propertySource instanceof OriginTrackedMapPropertySource) {
|
||||
if (MapPropertySource.class.isAssignableFrom(propertySource.getClass())) {
|
||||
MapPropertySource originTrackedMapPropertySource = (MapPropertySource) propertySource;
|
||||
String[] propertyNames = originTrackedMapPropertySource.getPropertyNames();
|
||||
for (String propertyName : propertyNames) {
|
||||
if (propertyName.length() > 55) {
|
||||
@@ -97,8 +107,9 @@ public class DedicatedLineServiceRegistration implements ApplicationListener<Ded
|
||||
Properties nacosProperties = new Properties();
|
||||
boolean find = false;
|
||||
for (PropertySource<?> propertySource : env.getPropertySources()) {
|
||||
if (propertySource instanceof OriginTrackedMapPropertySource) {
|
||||
OriginTrackedMapPropertySource originTrackedMapPropertySource = (OriginTrackedMapPropertySource) propertySource;
|
||||
// if (propertySource instanceof OriginTrackedMapPropertySource) {
|
||||
if (MapPropertySource.class.isAssignableFrom(propertySource.getClass())) {
|
||||
MapPropertySource originTrackedMapPropertySource = (MapPropertySource) propertySource;
|
||||
String[] propertyNames = originTrackedMapPropertySource.getPropertyNames();
|
||||
for (String propertyName : propertyNames) {
|
||||
if (propertyName.length() > 64) {
|
||||
|
||||
@@ -58,26 +58,33 @@ public class DedicatedLineWebServer {
|
||||
@Value("${fizz.dedicated-line.client.port:8601}")
|
||||
private int port = 8601;
|
||||
|
||||
@Value("${fizz.dedicated-line.client.enable:true}")
|
||||
private boolean fizzDedicatedLineClientEnable;
|
||||
|
||||
@PostConstruct
|
||||
public void start() {
|
||||
HttpWebHandlerAdapter adapter = (HttpWebHandlerAdapter) httpHandler;
|
||||
NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(port);
|
||||
server = factory.getWebServer(
|
||||
new DedicatedLineHttpHandler(
|
||||
applicationContext,
|
||||
new DefaultWebSessionManager(),
|
||||
adapter.getCodecConfigurer(),
|
||||
adapter.getLocaleContextResolver(),
|
||||
adapter.getForwardedHeaderTransformer()
|
||||
)
|
||||
);
|
||||
server.start();
|
||||
log.info("fizz dedicated line web server listen on {}", port);
|
||||
applicationContext.publishEvent(new DedicatedLineWebServerInitializedEvent(server, applicationContext));
|
||||
if (fizzDedicatedLineClientEnable) {
|
||||
HttpWebHandlerAdapter adapter = (HttpWebHandlerAdapter) httpHandler;
|
||||
NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(port);
|
||||
server = factory.getWebServer(
|
||||
new DedicatedLineHttpHandler(
|
||||
applicationContext,
|
||||
new DefaultWebSessionManager(),
|
||||
adapter.getCodecConfigurer(),
|
||||
adapter.getLocaleContextResolver(),
|
||||
adapter.getForwardedHeaderTransformer()
|
||||
)
|
||||
);
|
||||
server.start();
|
||||
log.info("fizz dedicated line web server listen on {}", port);
|
||||
applicationContext.publishEvent(new DedicatedLineWebServerInitializedEvent(server, applicationContext));
|
||||
}
|
||||
}
|
||||
|
||||
@PreDestroy
|
||||
public void stop() {
|
||||
server.stop();
|
||||
if (server != null) {
|
||||
server.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.springframework.stereotype.Service;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
import we.config.AggregateRedisConfig;
|
||||
import we.config.SystemConfig;
|
||||
import we.util.Consts;
|
||||
import we.util.JacksonUtils;
|
||||
import we.util.Result;
|
||||
@@ -42,7 +43,7 @@ import java.util.Map;
|
||||
*/
|
||||
|
||||
@Service
|
||||
public class RegistryCenterService implements ApplicationListener<ContextRefreshedEvent> {
|
||||
public class RegistryCenterService implements ApplicationListener<ContextRefreshedEvent> {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(RegistryCenterService.class);
|
||||
|
||||
@@ -54,6 +55,9 @@ public class RegistryCenterService implements ApplicationListener<ContextRefresh
|
||||
@Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE)
|
||||
private ReactiveStringRedisTemplate rt;
|
||||
|
||||
@Resource
|
||||
private SystemConfig systemConfig;
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(ContextRefreshedEvent event) {
|
||||
Result<?> result = initRegistryCenter();
|
||||
@@ -80,9 +84,19 @@ public class RegistryCenterService implements ApplicationListener<ContextRefresh
|
||||
json = (String) e.getValue();
|
||||
RegistryCenter rc = JacksonUtils.readValue(json, RegistryCenter.class);
|
||||
registryCenterMap.put(rc.name, rc);
|
||||
LOGGER.info("init registry center {}", rc);
|
||||
rc.initFizzServiceRegistration(applicationContext);
|
||||
rc.getFizzServiceRegistration().register();
|
||||
FizzServiceRegistration fizzServiceRegistration = rc.getFizzServiceRegistration();
|
||||
try {
|
||||
fizzServiceRegistration.register();
|
||||
LOGGER.info("success to init registry center {}", rc);
|
||||
} catch (Throwable throwable) {
|
||||
if (systemConfig.isFastFailWhenRegistryCenterDown()) {
|
||||
throw throwable;
|
||||
} else {
|
||||
LOGGER.warn("fail to init registry center {}, fast fail when registry center down is false, so continue", rc, throwable);
|
||||
fizzServiceRegistration.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
result.code = Result.FAIL;
|
||||
@@ -146,7 +160,13 @@ public class RegistryCenterService implements ApplicationListener<ContextRefresh
|
||||
fizzServiceRegistration.close();
|
||||
}
|
||||
rc.initFizzServiceRegistration(applicationContext);
|
||||
rc.getFizzServiceRegistration().register();
|
||||
FizzServiceRegistration fsr = rc.getFizzServiceRegistration();
|
||||
try {
|
||||
fsr.register();
|
||||
} catch (Throwable throwable) {
|
||||
LOGGER.error("fail to update registry center {}", rc, throwable);
|
||||
fsr.close();
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
LOGGER.error("update registry center error, {}", message, t);
|
||||
|
||||
@@ -55,7 +55,7 @@ public abstract class FizzEurekaHelper {
|
||||
public static FizzEurekaServiceRegistration getServiceRegistration(ApplicationContext applicationContext, Properties eurekaProperties) {
|
||||
|
||||
Properties eurekaProps = new Properties();
|
||||
for (String propertyName : eurekaProperties.stringPropertyNames()) {
|
||||
/*for (String propertyName : eurekaProperties.stringPropertyNames()) {
|
||||
String pn = null;
|
||||
if (propertyName.charAt(ecl - 1) == Consts.S.DOT) {
|
||||
pn = propertyName.substring(ecl);
|
||||
@@ -68,7 +68,25 @@ public abstract class FizzEurekaHelper {
|
||||
pn = PropertiesUtils.normalize(pn);
|
||||
}
|
||||
eurekaProps.setProperty(pn, eurekaProperties.getProperty(propertyName));
|
||||
}
|
||||
}*/
|
||||
|
||||
eurekaProperties.forEach(
|
||||
(n, v) -> {
|
||||
String propertyName = (String) n;
|
||||
String pn = null;
|
||||
if (propertyName.charAt(ecl - 1) == Consts.S.DOT) {
|
||||
pn = propertyName.substring(ecl);
|
||||
} else if (propertyName.charAt(eil - 1) == Consts.S.DOT) {
|
||||
pn = propertyName.substring(eil);
|
||||
} else {
|
||||
pn = propertyName.substring(el);
|
||||
}
|
||||
if (pn.indexOf(Consts.S.DASH) > -1) {
|
||||
pn = PropertiesUtils.normalize(pn);
|
||||
}
|
||||
eurekaProps.put(pn, v);
|
||||
}
|
||||
);
|
||||
|
||||
InetUtils inetUtils = null;
|
||||
try {
|
||||
|
||||
@@ -46,7 +46,7 @@ public abstract class FizzNacosHelper {
|
||||
public static FizzNacosServiceRegistration getServiceRegistration(ApplicationContext applicationContext, Properties nacosProperties) {
|
||||
|
||||
Properties ps = new Properties();
|
||||
for (String propertyName : nacosProperties.stringPropertyNames()) {
|
||||
/*for (String propertyName : nacosProperties.stringPropertyNames()) {
|
||||
String propertyValue = nacosProperties.getProperty(propertyName);
|
||||
if (propertyName.endsWith(PropertyKeyConst.USERNAME)) {
|
||||
ps.setProperty(PropertyKeyConst.USERNAME, propertyValue);
|
||||
@@ -59,7 +59,24 @@ public abstract class FizzNacosHelper {
|
||||
}
|
||||
ps.setProperty(pn, propertyValue);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
nacosProperties.forEach(
|
||||
(n, propertyValue) -> {
|
||||
String propertyName = (String) n;
|
||||
if (propertyName.endsWith(PropertyKeyConst.USERNAME)) {
|
||||
ps.put(PropertyKeyConst.USERNAME, propertyValue);
|
||||
} else if (propertyName.endsWith(PropertyKeyConst.PASSWORD)) {
|
||||
ps.put(PropertyKeyConst.PASSWORD, propertyValue);
|
||||
} else {
|
||||
String pn = propertyName.substring(ndl);
|
||||
if (pn.indexOf(Consts.S.DASH) > -1) {
|
||||
pn = PropertiesUtils.normalize(pn);
|
||||
}
|
||||
ps.put(pn, propertyValue);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
FizzNacosProperties fizzNacosProperties = new FizzNacosProperties(ps);
|
||||
PropertiesUtils.setBeanPropertyValue(fizzNacosProperties, ps);
|
||||
|
||||
@@ -24,13 +24,29 @@ import com.alibaba.nacos.api.exception.NacosException;
|
||||
import com.alibaba.nacos.api.naming.NamingService;
|
||||
import com.alibaba.nacos.api.naming.pojo.Instance;
|
||||
import com.alibaba.nacos.api.naming.pojo.ListView;
|
||||
import com.alibaba.nacos.client.naming.cache.ServiceInfoHolder;
|
||||
import com.alibaba.nacos.client.naming.core.ServerListManager;
|
||||
import com.alibaba.nacos.client.naming.core.ServiceInfoUpdateService;
|
||||
import com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate;
|
||||
import com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy;
|
||||
import com.alibaba.nacos.client.naming.remote.gprc.redo.NamingGrpcRedoService;
|
||||
import com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy;
|
||||
import com.alibaba.nacos.common.remote.client.Connection;
|
||||
import com.alibaba.nacos.common.remote.client.RpcClientStatus;
|
||||
import com.alibaba.nacos.common.remote.client.grpc.GrpcClient;
|
||||
import com.alibaba.nacos.common.utils.ThreadUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import we.service_registry.FizzServiceRegistration;
|
||||
import we.util.Consts;
|
||||
import we.util.ReflectionUtils;
|
||||
import we.util.Utils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import static com.alibaba.nacos.client.utils.LogUtils.NAMING_LOGGER;
|
||||
|
||||
/**
|
||||
* @author hongqiaowei
|
||||
@@ -67,8 +83,58 @@ public class FizzNacosServiceRegistration extends FizzServiceRegistration {
|
||||
return namingService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
ServiceInfoHolder serviceInfoHolder = (ServiceInfoHolder) ReflectionUtils.get(namingService, "serviceInfoHolder");
|
||||
NamingClientProxyDelegate namingClientProxyDelegate = (NamingClientProxyDelegate) ReflectionUtils.get(namingService, "clientProxy");
|
||||
try {
|
||||
serviceInfoHolder.shutdown();
|
||||
ServiceInfoUpdateService serviceInfoUpdateService = (ServiceInfoUpdateService) ReflectionUtils.get(namingClientProxyDelegate, "serviceInfoUpdateService");
|
||||
serviceInfoUpdateService.shutdown();
|
||||
ServerListManager serverListManager = (ServerListManager) ReflectionUtils.get(namingClientProxyDelegate, "serverListManager");
|
||||
serverListManager.shutdown();
|
||||
NamingHttpClientProxy namingHttpClientProxy = (NamingHttpClientProxy) ReflectionUtils.get(namingClientProxyDelegate, "httpClientProxy");
|
||||
namingHttpClientProxy.shutdown();
|
||||
NamingGrpcClientProxy namingGrpcClientProxy = (NamingGrpcClientProxy) ReflectionUtils.get(namingClientProxyDelegate, "grpcClientProxy");
|
||||
|
||||
GrpcClient grpcClient = (GrpcClient) ReflectionUtils.get(namingGrpcClientProxy, "rpcClient");
|
||||
|
||||
AtomicReference<RpcClientStatus> rpcClientStatus = (AtomicReference<RpcClientStatus>) ReflectionUtils.get(grpcClient, "rpcClientStatus");
|
||||
rpcClientStatus.set(RpcClientStatus.SHUTDOWN);
|
||||
LOGGER.info("shutdown {} grpc client ,set status to shutdown", getId());
|
||||
|
||||
ScheduledExecutorService clientEventExecutor = (ScheduledExecutorService) ReflectionUtils.get(grpcClient, "clientEventExecutor");
|
||||
clientEventExecutor.shutdownNow();
|
||||
LOGGER.info("shutdown {} client event executor {}", getId(), clientEventExecutor);
|
||||
|
||||
Connection currentConnection = (Connection) ReflectionUtils.get(grpcClient, "currentConnection");
|
||||
if (currentConnection != null) {
|
||||
ReflectionUtils.invokeMethod("closeConnection", grpcClient, currentConnection);
|
||||
LOGGER.info("close {} current connection {}", getId(), currentConnection.getConnectionId());
|
||||
}
|
||||
|
||||
NamingGrpcRedoService namingGrpcRedoService = (NamingGrpcRedoService) ReflectionUtils.get(namingGrpcClientProxy, "redoService");
|
||||
namingGrpcRedoService.shutdown();
|
||||
|
||||
ScheduledExecutorService scheduledExecutorService = (ScheduledExecutorService) ReflectionUtils.get(namingClientProxyDelegate, "executorService");
|
||||
ThreadUtils.shutdownThreadPool(scheduledExecutorService, NAMING_LOGGER);
|
||||
|
||||
LOGGER.info("nacos {} client resource is closed", getId());
|
||||
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("nacos {} naming service shutdown exception", getId(), e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void shutdownClient() {
|
||||
/*try {
|
||||
namingService.shutDown();
|
||||
} catch (NacosException e) {
|
||||
LOGGER.error("nacos {} naming service shutdown exception", getId(), e);
|
||||
throw new RuntimeException(e);
|
||||
}*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user