feat: 定时写盘

This commit is contained in:
骑着蜗牛追导弹 2024-12-05 22:40:17 +08:00
parent c8b70718d2
commit 0d05fc479e
9 changed files with 40 additions and 20 deletions

View File

@ -1,6 +1,7 @@
package cn.odboy.config.context; package cn.odboy.config.context;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.odboy.config.model.msgtype.ClientInfo; import cn.odboy.config.model.msgtype.ClientInfo;
import cn.odboy.config.netty.ConfigClient; import cn.odboy.config.netty.ConfigClient;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -13,10 +14,13 @@ import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MapPropertySource;
import java.io.File; import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -33,7 +37,7 @@ public class ClientConfigLoader {
private static final String DEFAULT_PATH_WIN = "c:\\data"; private static final String DEFAULT_PATH_WIN = "c:\\data";
private static final String DEFAULT_PATH_MAC = "/home/admin/data"; private static final String DEFAULT_PATH_MAC = "/home/admin/data";
private static final String DEFAULT_CONFIG_SERVER = "127.0.0.1"; private static final String DEFAULT_CONFIG_SERVER = "127.0.0.1";
private static final Integer DEFAULT_CONFIG_PORT = 28002; private static final Integer DEFAULT_CONFIG_PORT = 28010;
private static final String DEFAULT_CONFIG_ENV = "default"; private static final String DEFAULT_CONFIG_ENV = "default";
private static final String DEFAULT_CONFIG_DATA_ID = "default"; private static final String DEFAULT_CONFIG_DATA_ID = "default";
private static final String DEFAULT_PATH_WIN_SEP = ":"; private static final String DEFAULT_PATH_WIN_SEP = ":";
@ -77,6 +81,23 @@ public class ClientConfigLoader {
log.info("客户端属性: {}", clientInfo); log.info("客户端属性: {}", clientInfo);
validateCacheDirPath(defaultCacheDir, clientInfo.getCacheDir()); validateCacheDirPath(defaultCacheDir, clientInfo.getCacheDir());
createCacheDir(clientInfo.getCacheDir()); createCacheDir(clientInfo.getCacheDir());
ThreadUtil.execAsync(() -> {
// 定时刷盘
while (true) {
try {
if (!lastConfigs.isEmpty()) {
List<String> fileContent = new ArrayList<>();
for (Map.Entry<String, Object> kve : lastConfigs.entrySet()) {
fileContent.add(kve.getKey() + "=" + kve.getValue());
}
FileUtil.writeLines(fileContent, FileUtil.file(clientInfo.getCacheDir(), "config"), StandardCharsets.UTF_8);
}
Thread.sleep(5 * 1000);
} catch (Exception e) {
// 忽略
}
}
});
try { try {
ConfigClient client = new ConfigClient(); ConfigClient client = new ConfigClient();
client.start(clientInfo.getServer(), clientInfo.getPort()); client.start(clientInfo.getServer(), clientInfo.getPort());

View File

@ -1,5 +1,6 @@
package cn.odboy.config.netty; package cn.odboy.config.netty;
import cn.odboy.config.context.ClientConfigLoader;
import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*; import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup;
@ -50,7 +51,7 @@ public class ConfigClient {
@Override @Override
protected void initChannel(SocketChannel ch) throws Exception { protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline(); ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new ConfigClientHandler(ConfigClient.this)); pipeline.addLast(new ConfigClientHandler());
} }
}); });
doConnect(server, port); doConnect(server, port);
@ -101,6 +102,7 @@ public class ConfigClient {
protected void reConnect() { protected void reConnect() {
try { try {
System.err.println("ConfigClient -> Start reconnect to server." + this.connectServerIp + ":" + this.connectServerPort); System.err.println("ConfigClient -> Start reconnect to server." + this.connectServerIp + ":" + this.connectServerPort);
ClientConfigLoader.isConfigLoaded = false;
if (channel != null && channel.isOpen()) { if (channel != null && channel.isOpen()) {
System.err.println("ConfigClient -> Server [" + this.connectServerIp + "] channel is active, close it and reconnect"); System.err.println("ConfigClient -> Server [" + this.connectServerIp + "] channel is active, close it and reconnect");
channel.close(); channel.close();

View File

@ -19,11 +19,6 @@ import java.util.Map;
import java.util.Properties; import java.util.Properties;
public class ConfigClientHandler extends ChannelInboundHandlerAdapter { public class ConfigClientHandler extends ChannelInboundHandlerAdapter {
private final ConfigClient configClient;
public ConfigClientHandler(ConfigClient configClient) {
this.configClient = configClient;
}
@Override @Override
public void channelRegistered(ChannelHandlerContext ctx) throws Exception { public void channelRegistered(ChannelHandlerContext ctx) throws Exception {

View File

@ -1,7 +1,7 @@
kenaito: kenaito:
config-center: config-center:
server: 127.0.0.1 server: 127.0.0.1
port: 28002 port: 28011
data-id: kenaito-config-demo data-id: kenaito-config-demo
cache-dir: c:\\data cache-dir: c:\\data
env: daily env: daily

View File

@ -1,7 +1,7 @@
kenaito: kenaito:
config-center: config-center:
server: 127.0.0.1 server: 127.0.0.1
port: 28002 port: 28011
data-id: kenaito-config-demo data-id: kenaito-config-demo
cache-dir: /home/admin/data cache-dir: /home/admin/data
env: production env: production

View File

@ -1,7 +1,7 @@
kenaito: kenaito:
config-center: config-center:
server: 127.0.0.1 server: 127.0.0.1
port: 28002 port: 28011
data-id: kenaito-config-demo data-id: kenaito-config-demo
cache-dir: /home/admin/data cache-dir: /home/admin/data
env: stage env: stage

View File

@ -50,7 +50,7 @@ public class ConfigNettyServer implements InitializingBean {
pipeline.addLast(new ConfigServerHandler(configFileService)); pipeline.addLast(new ConfigServerHandler(configFileService));
} }
}); });
log.info("Netty Server Start..."); log.info("Netty Server Start..., Port=" + configCenterPort);
ChannelFuture channelFuture = serverBootstrap.bind(configCenterPort).sync(); ChannelFuture channelFuture = serverBootstrap.bind(configCenterPort).sync();
channelFuture.channel().closeFuture().sync(); channelFuture.channel().closeFuture().sync();
} finally { } finally {

View File

@ -1,5 +1,5 @@
server: server:
port: 28000 port: 28010
http2: http2:
# 提高网络传输效率, 默认为false # 提高网络传输效率, 默认为false
enabled: true enabled: true
@ -219,8 +219,9 @@ file:
path: /home/kenaito/file/ path: /home/kenaito/file/
avatar: /home/kenaito/avatar/ avatar: /home/kenaito/avatar/
windows: windows:
path: C:\kenaito\file\ # 一定不要用’\‘符号, 会导致一系列的BUG
avatar: C:\kenaito\avatar\ path: C:/kenaito/file/
avatar: C:/kenaito/avatar/
# 文件大小 /M # 文件大小 /M
maxSize: 100 maxSize: 100
avatarMaxSize: 5 avatarMaxSize: 5
@ -248,4 +249,4 @@ task:
queue-capacity: 50 queue-capacity: 50
kenaito: kenaito:
config-center: config-center:
port: 28002 port: 28011

File diff suppressed because one or more lines are too long