spring cloud gateway断言的使用

前两天服务器系统盘损坏了,被逼的备份公共微服务和数据库,总结一下配网关时遇到的坑。

正常启动nacos后,将gateway和其他业务微服务项目注册上nacos;

当需要转发时,在gateway的yaml文件中需要配置路由spring.cloud.gateway.routes属性

例如:

- id: uias
  uri: lb://uias
  predicates:
    - Path=/uias-api/**
  filters:
    - StripPrefix=1

其中filters中的StripPrefix属性是转发到下游服务时剥离的路径个数,

例如/uias-api/login/admin请求经过这个gateway后,gateway会将/login/admin请求转发到uias的服务,如果有集群,则根据负载均衡转发到其中的一个uias服务。

需要注意:

如果请求路径中带有**/uias/**,则gateway会默认将整个请求转发到uias的服务;这是因为gateway会将同名的路径请求转发到同名服务,多层路径进行过滤都没有用。。。

这是gateway的默认机制,导致我排查问题排查半天,所以建议需要转发的请求在前端发起时都带上-api。

### Spring Cloud Gateway 断言使用方法 Spring Cloud Gateway中的断言用于匹配HTTP请求,只有当请求满足特定条件时才会被路由到目标服务。这些断言可以通过多种方式进行配置。 #### 配置方式 支持通过Java配置和YAML文件来定义路由及其对应的断言逻辑[^2]。下面分别介绍这两种配置方式下的具体实现: #### YAML配置示例 在`application.yml`中定义带有路径断言的简单路由规则如下所示: ```yaml spring: cloud: gateway: routes: - id: example_route uri: http://example.org predicates: - Path=/example/** ``` 此配置表示任何以`/example/`开头的URL都将转发给`http://example.org`服务器处理。 #### Java DSL配置示例 如果偏好编程式的配置,则可以在Spring Boot应用程序启动类或其他适当位置编写如下代码片段: ```java @Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/example/**") .uri("http://example.org")) .build(); } ``` 这段代码实现了相同的功能——将符合条件的请求重定向至指定的目标地址。 #### 常见内置断言 除了基本的路径匹配外,还有许多其他类型的预构建断言可供选择,比如查询参数、头部信息等。以下是部分常用选项列表: - **Path**: 匹配请求路径模式。 - **Query**: 根据是否存在某个查询字符串键或其值来进行过滤。 - **Header**: 对于含有特定头字段或者该字段具有某些允许取值范围内的请求生效。 - **Method**: 只有当传入的方法类型(GET, POST...)相同时才触发对应操作。 对于更复杂的场景,还可以自定义自己的断言处理器并将其集成进来。这通常涉及到继承抽象基类`AbstractRoutePredicateFactory<T>`以及覆写相应的方法[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值