Files
cn-rdms/rdms-framework/rdms-spring-boot-starter-env/readme.md
2026-03-11 19:32:37 +08:00

1.2 KiB
Raw Blame History

这个模块的核心作用是“环境标签(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通常代表该环境不需要“按人/按版本隔离流量”,走默认路由即可。