前置知识
在学习本教程之前,请确保已经:
- 掌握 ZooKeeper 的基本使用
- 了解分布式系统设计模式
- 具备实际项目开发经验
分布式配置中心实现
1. 配置中心设计
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ConfigCenter {
private final CuratorFramework client;
private final String configPath;
private final Map<String, String> localCache;
public ConfigCenter(CuratorFramework client, String configPath) {
this.client = client;
this.configPath = configPath;
this.localCache = new ConcurrentHashMap<>();
initConfigCenter();
}
private void initConfigCenter() {
try {
// 确保配置根节点存在
if (client.checkExists().forPath(configPath) == null) {
client.create()
.creatingParentsIfNeeded()
.forPath(configPath);
}
// 监听配置变化
PathChildrenCache cache = new PathChildrenCache(client, configPath, true);
cache.start();
cache.getListenable().addListener((client, event) -> {
switch (event.getType()) {
case CHILD_ADDED:
case CHILD_UPDATED:
updateLocalCache(event.getData().getPath(),
new String(event.getData().getData()));
break;
case CHILD_REMOVED:
removeFromLocalCache(event.getData().getPath());
break;
}
});
} catch (Exception e) {
log.error("初始化配置中心失败", e);
}
}
private void updateLocalCache(String path, String data) {
String key = path.substring(configPath.length() + 1);
localCache.put(key, data);
log.info("配置更新:{} = {}", key, data);
}
private void removeFromLocalCache(String path) {
String key = path.substring(configPath.length() + 1);
localCache.remove(key);
log.info("配置删除:{}", key);
}
}
2025/9/17大约 4 分钟