📖 本章预览
本章为预览版本,展示部分核心内容。完整内容包含详细源码解析、实战代码和面试要点,加入知识星球即可解锁全部章节。
第十章:Config 配置发布与查询
配置发布是 Config 模块最核心的写操作。本章从 gRPC 入口开始,逐行拆解发布全链路和查询责任链的底层实现。
10.1 配置发布全链路总览
客户端 SDK
│ ConfigService.publishConfig(dataId, group, content)
▼
ConfigPublishRequest ──gRPC──→ ConfigPublishRequestHandler.handle()
│ ① @TpsControl → TPS 限流
│ ② @Secured → 鉴权
│ ③ EncryptionHandler → 加密处理
▼
ConfigOperationService.publishConfig()
│
├─ 灰度发布 → publishConfigGray() → 写入灰度表
├─ CAS 校验(防并发覆盖)
├─ 写入 DB → configInfoPersistService.insertOrUpdate()
├─ 发布 ConfigDataChangeEvent
│ ├─→ DumpService → 更新 CacheItem → 推送客户端
│ └─→ AsyncNotifyService → 通知集群其他节点 Dump
└─ 返回成功
10.2 ConfigPublishRequestHandler — gRPC 入口深度分析
10.2.1 注解驱动的前置处理
@Component
public class ConfigPublishRequestHandler
extends RequestHandler<ConfigPublishRequest, ConfigPublishResponse> {
@Override
@NamespaceValidation
@TpsControl(pointName = "ConfigPublish")
@Secured(action = ActionTypes.WRITE, signType = SignType.CONFIG)
@ExtractorManager.Extractor(rpcExtractor = ConfigRequestParamExtractor.class)
public ConfigPublishResponse handle(ConfigPublishRequest request, RequestMeta meta)
throws NacosException {
// ...
}
}
| 注解 | 作用 | 失败行为 |
|---|---|---|
@NamespaceValidation | 校验 namespace 是否存在 | 返回错误响应 |
@TpsControl | 检查限流点的 QPS | 返回限流响应 |
@Secured | 验证 CONFIG 的 WRITE 权限 | 返回 403 |
@ExtractorManager.Extractor | 从请求中提取参数 | 参数校验失败 |
10.2.2 加密处理 — EncryptionHandler
String encryptedDataKeyFinal = null;
if (StringUtils.isNotBlank(encryptedDataKey)) {
encryptedDataKeyFinal = encryptedDataKey;
} else {
Pair<String, String> pair = EncryptionHandler.encryptHandler(dataId, content);
content = pair.getSecond();
encryptedDataKeyFinal = pair.getFirst();
configForm.setContent(content);
}
加密通过 SPI 插件化实现,根据 dataId 后缀判断是否需要加密。
🔒 解锁完整内容
本章剩余内容需要解锁后查看
以上仅为本章部分预览内容,完整内容包含更多深度源码解析、实战代码和面试要点。
加入知识星球你将获得:
- ✅ 全部 17 章完整内容 + 持续更新
- ✅ 配套源码 + 实战项目
- ✅ 一对一答疑 + 面试辅导
- ✅ 简历优化 + 内推机会
📚 本章完整目录
以下为本章完整目录结构,加入知识星球即可解锁全部内容。