既然你对 Spring Cloud 了解较少,我们可以把“网关(Gateway)”和“注册中心(Nacos)”想象成一个大型医院的导诊系统。
1. 核心角色:Nacos 与 Gateway
-
Nacos(注册中心/配置中心):相当于医院的**“排班表”**。
-
所有的医生(微服务,如订单服务、用户服务)上线后,都会去 Nacos 登记自己的 IP 和端口。
-
网关不需要死记硬背每个服务的地址,只需要问 Nacos:“现在哪几个‘挂号医生’在线?”
-
-
Spring Cloud Gateway(网关):相当于医院的**“大门和导诊台”**。
-
所有的病人(客户端请求)必须先进大门。
-
导诊台负责:看你的挂号单(权限校验)、告诉你去哪个诊室(路由分配)。
-
2. 路由分配到节点(动态路由)
在 Spring Cloud 中,网关是如何精准地把请求发给某个 Java 进程的?
-
服务发现:网关启动时会连接 Nacos。
-
配置路由规则:你在配置文件里写:
如果路径以 /order/ 开头,就转发给 order-service。 -
负载均衡(Load Balancer):
-
网关从 Nacos 获取
order-service的节点列表(假设有 3 台服务器 A、B、C)。 -
网关会根据算法(如轮询)选出一台,比如 B 节点,然后把请求转发过去。
-
3. 权限校验(统一门禁)
这是网关最核心的价值之一:不再需要在每个微服务里写一遍登录校验。
-
全局过滤器(Global Filter):网关里可以写一段逻辑,拦截所有进入的请求。
-
校验流程:
-
提取 Token:从 HTTP Header 里拿到
Authorization(通常是 JWT)。 -
验证合法性:检查 Token 是否过期、签名是否正确。
-
鉴权:甚至可以去 Redis 查一下这个用户有没有访问该接口的权限。
-
放行或拒绝:
-
校验通过:
chain.filter(exchange),请求继续往后走。 -
校验失败:直接返回
401 Unauthorized,请求根本进不到后面的业务服务器。
-
-
4. 为什么要这么做?(资深开发的思维)
如果你不写代码做程序员了,转去做产品经理或技术管理,理解这个架构也非常重要:
-
解耦:后端服务只管写业务逻辑(比如怎么算优惠券),不用管用户是怎么登录的。
-
安全:后端服务可以部署在内网,只暴露网关一个公网入口,极大减少了被黑客攻击的风险。
-
灰度发布:你可以通过网关配置:
5% 的流量去新版本节点,95% 去旧版本。如果新版本有问题,直接在网关切断,不需要重启任何服务。
🛠 给你的起步建议
虽然你现在想转型,但如果要面试相关公司,建议了解一下这几个具体的配置名词:
-
Predicate(断言):匹配请求的条件(比如:路径、参数、时间)。
-
Filter(过滤器):匹配后要做的事(比如:改 Header、限流、日志)。
-
Nacos Discovery:Java 代码里只需要加一个注解
@EnableDiscoveryClient,服务就能自动排班。
既然聊到了网关权限校验,你想看看在网关层如何通过一行代码把“解析出的用户 ID”透传给后面的微服务吗?这对后端开发非常关键。