Spring Cloud Gateway常见问题
Spring Gateway不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能。
Spring Cloud Gateway工作流程
-
路由判断:客户端的请求到达网关后,先经过 Gateway Handler Mapping 处理,这里面会做断言(Predicate)判断,看下符合哪个路由规则,这个路由映射后端的某个服务。
-
请求过滤:然后请求到达 Gateway Web Handler,这里面有很多过滤器,组成过滤器链(Filter Chain),这些过滤器可以对请求进行拦截和修改,比如添加请求头、参数校验等等,有点像净化污水。然后将请求转发到实际的后端服务。
-
服务处理:后端服务会对请求进行处理。
-
响应过滤:后端处理完结果后,返回给 Gateway 的过滤器再次做处理。
-
响应返回:响应经过过滤处理后,返回给客户端。
Spring Cloud Gateway的断言是什么?
断言(编程术语):对一个表达式进行if判断,结果为真 / 假,如果为真则做这件事,否则就做那件事。
如果客户端发送的请求满足断言条件,则映射到指定的路由器,转发到指定的服务上处理。
Spring Cloud Gateway如何实现动态路由?
基于Nacos注册中心实现,Spring Cloud Gateway从注册中心获取服务的元数据(服务名称、路径等),然后根据这些信息自动生成路由规则,当你添加、移除或更新服务实例时,网关会自动感知并相应调整路由规则,无需手动维护路由配置。
Spring Cloud Gateway的过滤器有哪些?
- 过滤器Filter按 请求 和 响应 划分:
- Pre类型:在请求被转发到微服务之前,对请求进行拦截和修改。例如:参数校验、权限校验、流量监控、日志输出、协议转换等操作。
- Post类型:微服务处理完请求后,返回相应给网关,网关可以再次处理。例如修改响应内容、响应头、日志输出、流量监控等。
- 过滤器Filter按 作用范围 划分:
- GatewayFilter:局部过滤器,应用在 单个 或 一组路由 上的过滤器。
- GlobalFilter:全局过滤器:应用在所有路由上的过滤器。
局部过滤器
如果URL匹配成功,则去掉URL中的"API"
filters: #过滤器
- RewritePath=/api/(?<segment>.*),/$\{segment} # 将跳转路径中包含的 “api” 替换成空
全局过滤器
常见用法:负载均衡
spring:
cloud:
gateway:
routes:
- id: route_member # 第三方微服务路由规则
uri: lb://passjava-member # 负载均衡,将请求转发到注册中心注册的 passjava-member 服务
predicates: # 断言
- Path=/api/member/** # 如果前端请求路径包含 api/member,则应用这条路由规则
filters: #过滤器
- RewritePath=/api/(?<segment>.*),/$\{segment} # 将跳转路径中包含的api替换成空
关键字 lb
,用到全局过滤器 LoadBalancerClientFilter
,当匹配到这个路由后,会将请求转发到 passjava-member 服务,且支持负载均衡转发,也就是先将 passjava-member 解析成实际微服务的 host 和 port,再转发给实际的微服务。
Spring Cloud Gateway 如何自定义全局异常处理?
在 SpringBoot 项目中,捕获全局异常只需要在项目中配置 @RestControllerAdvice
和 @ExceptionHandler
就可以了。不过,这种方式在 Spring Cloud Gateway 下不适用。
Spring Cloud Gateway 提供了多种全局处理的方式,比较常用的一种是实现ErrorWebExceptionHandler
并重写其中的handle
方法。
@Order(-1)
@Component
@RequiredArgsConstructor
public class GlobalErrorWebExceptionHandler implements ErrorWebExceptionHandler {
private final ObjectMapper objectMapper;
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
// ...
}
}
原文地址:https://blog.csdn.net/m0_74119287/article/details/143696028
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!