24 lines
1.2 KiB
Markdown
24 lines
1.2 KiB
Markdown
这个模块的核心作用是“环境标签(tag)透传 + 按标签路由”。
|
||
|
||
它具体做了什么
|
||
|
||
1. 启动早期把 rdms.env.tag 映射到 Nacos 实例 metadata (spring.cloud.nacos.discovery.metadata.tag)。
|
||
文件: EnvEnvironmentPostProcessor.java
|
||
2. Web 请求进来时读取请求头 tag,放到线程上下文。
|
||
文件: EnvWebFilter.java
|
||
3. Feign 调用时把上下文里的 tag 继续写到下游请求头。
|
||
文件: EnvLoadBalancerClient.java
|
||
|
||
rdms.env.tag 在这个项目里是可选的,不配也能跑。
|
||
代码里明确是“有就生效、没有就跳过”:
|
||
- 读取 rdms.env.tag,为空就直接返回,不改路由标签
|
||
EnvEnvironmentPostProcessor.java
|
||
- application-local.yaml 里配了 rdms.env.tag: ${HOSTNAME},而 dev 没配
|
||
application-local.yaml
|
||
它的目的就是你说的这种场景之一:
|
||
多人共用一个 Nacos namespace/集群时,用 tag 做流量隔离(比如“我发起的请求尽量打到我这套实例”)。
|
||
再具体点,作用有三层:
|
||
1. 给本实例打 Nacos metadata tag。
|
||
2. 接口收到 tag 请求头后放到上下文。
|
||
3. Feign/LB 优先选同 tag 实例。
|
||
所以 dev 不配 tag,通常代表该环境不需要“按人/按版本隔离流量”,走默认路由即可。 |