From 41a9ded54a6e66a88ff8dd4b9654da7837fabe22 Mon Sep 17 00:00:00 2001 From: aoshiguchen <1052045476@qq.com> Date: Sat, 29 Oct 2022 23:40:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=96=AD=E7=BA=BF=E9=87=8D=E8=BF=9E=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fun/asgc/neutrino/core/util/DateUtil.java | 7 ++++ .../proxy/client/core/ProxyClientService.java | 38 +++++++++++++++++++ .../src/main/resources/logback.xml | 2 +- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/util/DateUtil.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/util/DateUtil.java index e24da60f..82a660b1 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/util/DateUtil.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/util/DateUtil.java @@ -36,6 +36,13 @@ import java.util.function.Consumer; * @date: 2022/6/28 */ public class DateUtil { + public static final long SECOND_LONG = 1000L; + public static final long MINUTE_LONG = 60 * SECOND_LONG; + public static final long HOUR_LONG = 60 * MINUTE_LONG; + public static final long DAY_LONG = DAY_2_HOUR * HOUR_LONG; + public static final long MONTH_LONG = 30 * DAY_LONG; + public static final long YEAR_LONG = 365 * DAY_LONG; + private static final Cache sdfCache = new MemoryCache<>(); private static SimpleDateFormat getSimpleDateFormat(String format) { try { diff --git a/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/core/ProxyClientService.java b/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/core/ProxyClientService.java index 85c95677..aea79251 100644 --- a/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/core/ProxyClientService.java +++ b/neutrino-proxy-client/src/main/java/fun/asgc/neutrino/proxy/client/core/ProxyClientService.java @@ -26,6 +26,7 @@ import fun.asgc.neutrino.core.annotation.Autowired; import fun.asgc.neutrino.core.annotation.Bean; import fun.asgc.neutrino.core.annotation.Component; import fun.asgc.neutrino.core.annotation.NonIntercept; +import fun.asgc.neutrino.core.base.CustomThreadFactory; import fun.asgc.neutrino.core.context.Environment; import fun.asgc.neutrino.core.util.FileUtil; import fun.asgc.neutrino.core.util.StringUtil; @@ -49,6 +50,9 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import java.io.InputStream; import java.security.KeyStore; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; /** * 客户端服务 @@ -69,6 +73,27 @@ public class ProxyClientService { @Autowired private Environment environment; private volatile Channel channel; + /** + * 重连间隔(秒) + */ + private static final long RECONNECT_INTERVAL_SECONDS = 5; + /** + * 重连次数 + */ + private volatile int reconnectCount = 0; + /** + * 启用重连服务 + */ + private volatile boolean reconnectServiceEnable = true; + /** + * 重连服务执行器 + */ + private static final ScheduledExecutorService reconnectExecutor = Executors.newSingleThreadScheduledExecutor(new CustomThreadFactory("ClientReconnect")); + + + public void ProxyClientService() { + this.reconnectExecutor.scheduleWithFixedDelay(this::reconnect, 0, RECONNECT_INTERVAL_SECONDS, TimeUnit.SECONDS); + } public void start() { if (StringUtil.isEmpty(proxyConfig.getLicenseKey())) { @@ -125,6 +150,8 @@ public class ProxyClientService { ProxyUtil.setCmdChannel(future.channel()); future.channel().writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getLicenseKey())); log.info("连接代理服务成功. channelId:{}", future.channel().id().asLongText()); + + reconnectCount = 0; } else { log.info("连接代理服务失败!"); System.exit(-1); @@ -156,6 +183,17 @@ public class ProxyClientService { return null; } + protected synchronized void reconnect() { + if (!reconnectServiceEnable) { + return; + } + if (channel.isActive()) { + return; + } + log.info("客户端重连 seq:{}", ++reconnectCount); + connectProxyServer(); + } + @Bean public Bootstrap bootstrap() { return new Bootstrap(); diff --git a/neutrino-proxy-server/src/main/resources/logback.xml b/neutrino-proxy-server/src/main/resources/logback.xml index a39d6bc7..1dc705e4 100644 --- a/neutrino-proxy-server/src/main/resources/logback.xml +++ b/neutrino-proxy-server/src/main/resources/logback.xml @@ -26,7 +26,7 @@ - +