前置知识
在开始本教程之前,建议您具备以下基础知识:
- Docker基础操作
- Linux系统管理
- 基本的网络知识
- 安全基础概念
Docker监控与日志
1. 容器监控
# 基本状态监控
docker stats
# 查看容器进程
docker top mycontainer
# 查看容器事件
docker events --filter 'container=mycontainer'
2025/9/17大约 3 分钟
前置知识
在开始本教程之前,建议您具备以下基础知识:
# 基本状态监控
docker stats
# 查看容器进程
docker top mycontainer
# 查看容器事件
docker events --filter 'container=mycontainer'
为什么需要提交规范
良好的提交规范可以提高代码审查效率,自动生成变更日志,并帮助团队成员理解变更的目的和影响范围。
遵循约定式提交规范的提交信息格式:
<类型>[可选的作用域]: <描述>
[可选的正文]
[可选的脚注]
在学习本教程之前,您需要掌握:
通过本章学习,您将掌握:
学习目标
前置知识
在学习本教程之前,建议您已经了解:
在微服务架构中,合理使用设计模式可以提高系统的可靠性、可维护性和可扩展性。下面介绍几种适用于 Ribbon 的设计模式。
前置知识
在学习本教程之前,建议您已经了解:
由于 Netflix Ribbon 已进入维护模式,Spring Cloud 推荐使用 Spring Cloud LoadBalancer 作为替代方案。
前置知识
在学习本教程之前,请确保已经:
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);
}
}