
网关介绍
问题背景 :
微服务架构中 , 随着模块拆分 , 原本单体应用的权限校验逻辑需要在多个服务中重复出现 , 导致代码冗余和维护困难
服务接口直接暴露 , 缺乏统一安全屏障和流量治理入口
API 网关
API 网关是微服务架构的唯一入口(门面模式) , 类似于"前台" , 主要负责 :
权限控制 : 统一身份验证 , 拦截非法请求
动态路由 : 根据规则将请求转发至目标微服务
负载均衡 : 当目标服务有多个实例时 , 自动分发流量
限流 : 防止突发流量压垮后端服务
常见网关 :
| 组件 | 特点 | 状态 |
| Zuul | Netflix 开源,与 Eureka/Ribbon 配合好 | 2018 年进入维护状态,不再推荐新项目使用 |
| Spring Cloud Gateway | Spring 官方基于 Netty 开发,异步非阻塞,性能更高 | 推荐,旨在替代 Zuul,性能约为 Zuul 的 1.6 倍 |
Spring Cloud Gateway 快速入门
① 创建 gateway Module 并引入依赖
<!--网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--负载均衡-->
<dependency><groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
② 配置文件
server:
port: 10030 # 网关端口
spring:
application:
name: gateway
profiles:
active: dev
cloud:
loadbalancer:
nacos:
enabled: true
ribbon:
enabled: false
nacos:
discovery:
server-addr: 39.106.193.201:8848
# cluster-name: SH
namespace: fe19f572-f4b8-423f-a783-def2beba9ca4
config:
server-addr: 39.106.193.201:8848
file-extension: yaml
namespace: fe19f572-f4b8-423f-a783-def2beba9ca4
gateway:
routes: # 路由配置列表
- id: product-service # 路由唯一标识
uri: lb://product-service # 目标服务地址 (lb表示负载均衡)
predicates: # 路由断言 (匹配规则)
- Path=/product/** # 匹配以 /product 开头的请求
- id: order-service
uri: lb://order-service
predicates:
- Path=/order/**
- id : 自定义路由 ID , 唯一
- uri : 目标服务地址 , 支持普通 URI 和 lb://应用注册服务名称 (lb 标识负载均衡 , 使用 lb://方式标识从注册中心获取到服务地址)
- predicates : 路由条件 , 根据匹配结果决定是否执行该请求路由
- Path 断言:
Path=/product/**表示匹配所有以/product开头的 URL
组合断言 : 一个路由可以配置多个断言 , 所有断言必须同时满足
注意 : 在之前的项目中我们配置过 namespace 需要将 gateway 放在和其余项目相同的环境中 , 否则项目启动成功后也无法调用

③ 测试 : http://127.0.0.1:10030/order/1

7288

被折叠的 条评论
为什么被折叠?



