1530 字
约 5 分钟
4
S04-X01 · Nacos 与杂项登记(附录)

适用读者:要补 Nacos 基础、核对旧文去向的读者。
性质:登记表 + Nacos 五问的判据化整理 + 两组重复导出的处置。
覆盖旧文:2932–2936(Nacos 五篇 + Gateway 总览)、2942(策略+工厂:文件上传多存储)、2763/3007(Java 多线程,同文重复)、2765/3009(Java 网络编程,同文重复)→ 11 篇。
扩展点:E-S04-042(注册中心只回答"有谁",不回答"调得通")、E-S04-043(热更新只作用于配置,不作用于结构)。


1. 逐篇登记

旧文 标题 字符 处置 去向
2932 Nacos 入门:什么是 Nacos 1,208 appendix 本文 §2
2933 Nacos 服务注册:什么是服务注册 1,060 appendix 本文 §2
2934 Nacos Namespace:如何实现项目隔离 1,039 appendix 本文 §3
2935 Nacos 如何动态加载 Bean 948 appendix 本文 §3
2936 Gateway 网关:微服务中的统一入口 1,158 duplicate_ref S04-J12 §2/§4
2942 策略 + 工厂模式:文件上传多存储方案 5,206 appendix 本文 §4
2763 / 3007 Java 多线程编程(同文两版) 5,634 ×2 appendix + duplicate_ref 2763 登记;3007 → 2763
2765 / 3009 Java 网络编程(同文两版) 10,333 ×2 appendix + duplicate_ref 2765 登记;3009 → 2765

重复导出记录:2763/3007(逐字相同,5,634 字符)与 2765/3009(逐字相同,10,333 字符)为同章两版导出("第62章/第64章" 与无章号版本)。这是全站第 5、6 对,已在 coverage.csv 标 duplicate_ref 指向保留版。


2. Nacos 是什么、注册在做什么

Nacos = 注册中心 + 配置中心(两件事经常一起用,但可以只用其一)

服务注册:启动时把「服务名 + IP:PORT + 元数据」写入注册中心;定期心跳续约
服务发现:调用方按服务名拉取实例列表(本地缓存 + 订阅推送),负载均衡后发起调用
健康检查:临时实例靠客户端心跳,永久实例靠服务端探测
判据 说明
服务名即契约 改名等于断链;服务名与 spring.application.name 必须一致
心跳与摘除有延迟 实例挂了要等心跳超时才摘除 → 调用方必须有重试 + 熔断,不能假设列表实时
本地缓存是必需的 注册中心不可用时仍能用缓存列表调用(可用性优先)
注册中心不是网关 它只回答"有谁",不负责鉴权与路由策略

判据:"注册中心解决的是'找到谁',不解决'调得通'"——超时、重试、熔断在客户端侧。


3. Namespace 隔离与配置热更新

隔离层级:Namespace(环境/租户) > Group(业务分组) > DataId(单个配置)
判据:环境隔离用 Namespace;同环境下多套配置用 Group;不要用 DataId 前缀硬凑隔离

动态加载 Bean 的三条路(2935):

方式 机制 边界
@RefreshScope 配置变更时重建 Bean 只对 @Value/@ConfigurationProperties 生效;重建期间可能短暂不可用
ConfigService.addListener 手动监听,自行处理 灵活、可控,但要自己保证线程安全
启动时读取一次 简单 不热更

判据:"热更新只应作用于'配置',不应作用于'结构'"——数据源地址可热更,Bean 拓扑(如注册了哪些 Handler)不宜热更,否则会出现半新半旧状态。


4. 策略 + 工厂:多存储上传(2942)

接口:StorageService { String upload(InputStream in, String name); InputStream download(String key); }
实现:LocalStorage / MinioStorage / OssStorage(各自 @Component("minio") 等)
工厂:StorageFactory 用 Map<String, StorageService> 注入所有实现,按配置名取
判据:新增存储 = 新增一个实现类,不改调用方(开闭原则)
// 环境:Spring Boot 3.x;MinIO SDK 8.x
@Component
public class StorageFactory {
    private final Map<String, StorageService> impls;
    public StorageFactory(List<StorageService> list) {   // Spring 注入全部实现
        this.impls = list.stream().collect(Collectors.toMap(StorageService::type, s -> s));
    }
    public StorageService get(String type) {
        StorageService s = impls.get(type);
        if (s == null) throw new IllegalArgumentException("未知存储类型: " + type);
        return s;
    }
}

判据:"策略模式的判据是'分支会增长',不是'分支多于两个'"——只有两种存储且不会增加时,if/else 更清楚。

上传的两个工程点:① 文件名不要用用户输入(路径穿越);② 大文件走分片/直传,不要经应用服务器转发。


5. Java 网络编程与多线程(同文重复,保留登记)

旧文 内容 结论
2765(=3009) BIO/NIO/AIO、Socket、缓冲区、粘包拆包 核心判据:"粘包不是 bug,是 TCP 流语义"——必须自带长度/分隔协议
2763(=3007) 线程生命周期、锁、线程池七参数、volatile/synchronized 核心判据:"线程池不要用 Executors 默认工厂"(无界队列/OOM)

为什么不重写:这两篇是教材章节的原文速览,其知识点已在 S05(并发编程)与 S02(网络)系统主讲;此处保留登记与跨系列指针,避免同题第三遍。


6. 缺口与待核

项 状态
Nacos 2.x/3.x 版本差异(gRPC 长连接、鉴权) 待核:正文按 2.x 口径写机制
2935 动态 Bean 的具体实现 原文示例不完整,待核
2942 的 MinIO 版本与签名算法 待核
Java 网络/多线程两对重复 已按逐字比对判定(5,634 / 10,333 相同)

7. 下一篇

S04 系列验收(v3) —— 补编 2 篇后的整体验收;随后 S23 自托管推理补编。


本篇属于系列《S04 · Java 与微服务基础》。旧文来源:A-2932–2936、A-2942、A-2763/3007、A-2765/3009;扩展点 E-S04-034/035。Sa-Token / Nacos / OpenFeign 版本细节按官方文档核对(待核)。

S04-X01 · Nacos 与杂项登记(附录)
https://www.clxhxhhr.top/posts/5239/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。