网关
网关(通常指API网关)扮演着核心的入口角色,它位于微服务集群的边缘,承担着所有外部请求的接入与内部服务的调度职责.
通俗来说就是把前端的请求路由到对应的微服务,由对应的微服务处理请求
实现网关
- 创建网关项目
- 引入网关相关依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
- 配置文件
spring: application: name: gateway # 项目名称 cloud: gateway: # 全局路由前缀 global-prefix: /api # 路由配置 routes: - id: user-service-route # 路由ID,唯一标识 一般是填写对应的微服务名称 uri: lb://user-service # 目标服务的URL,lb:// 表示使用负载均衡 predicates: # 路由断言,决定是否将请求路由到此目标 根据controller层来填写 - Path=/users/** filters: # 路由过滤器,可以在请求前或请求后执行操作 - StripPrefix=1 # 去除路径上的第一个前缀,如/users/1 -> /1 default-filters: # 全局过滤器 - StripPrefix=1 # 去除路径上的第一个前缀,如/users/1 -> /1
- 编写启动类
断言与过滤
具体可以参考官方文档
- 断言:判断请求是否满足要求,满足则放行,不满足则不放行
- 过滤:对请求进行处理,如:可以增加请求头参数
网关底层实现图
实现过滤器
全局过滤器
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
System.out.println("Global Filter: " + request.getPath());
// 在此处添加你的过滤逻辑
return chain.filter(exchange); // 继续执行下一个过滤器
}
@Override
public int getOrder() {
return -1; // 自定义执行顺序 数值越小优先级越高
}
}