当前位置: 首页 > article >正文

Spring Cloud Gateway之路由配置

Spring Cloud Gateway支持多种方式的路由配置,允许根据各种条件和需求来定义和控制请求的路由行为。以下是Spring Cloud Gateway中常用的路由配置选项和相关功能:

基本路由配置

路由的基本配置通常包括路由ID、目标URI、谓词(Predicates)和过滤器(Filters)。这是一个最基本的路由配置结构:

spring:
  cloud:
    gateway:
      routes:
        - id: example_route
          uri: https://example.com
          predicates:
            - Path=/example/** 
          filters:
            - AddRequestHeader=Example, Header
  • id: 路由的唯一标识符。
  • uri: 目标URI,表示请求将被转发到哪个服务或外部网站。
  • predicates: 路由谓词,用于定义哪些请求符合条件并会匹配此路由。
  • filters: 过滤器,用于在请求被路由到目标URI之前或响应返回客户端之前对请求或响应进行处理。

谓词(Predicates)

谓词用于定义路由的匹配条件。Spring Cloud Gateway支持多种谓词类型,它们基于Spring的java.util.function.Predicate。常用的谓词包括:

  • Path: 按照请求路径匹配。例如,Path=/example/**
  • Method: 按照HTTP方法匹配。例如,Method=GET
  • Header: 按照请求头匹配。例如,Header=X-Request-Id, \d+
  • Query: 按照请求参数匹配。例如,Query=foo, ba.
  • Cookie: 按照请求中的Cookie匹配。例如,Cookie=chocolate, choco.*
  • Host: 按照主机名匹配。例如,Host=**.example.com
spring:
  cloud:
    gateway:
      routes:
        - id: header_route
          uri: https://example.com
          predicates:
            - Header=MyHeader, my-value

过滤器(Filters)

过滤器是Spring Cloud Gateway路由的重要组成部分,用于在请求或响应的生命周期中添加自定义处理逻辑。常用的过滤器包括:

  • AddRequestHeader: 添加请求头。
  • AddRequestParameter: 添加请求参数。
  • StripPrefix: 移除路径前缀。
  • RewritePath: 重写请求路径。
  • SetPath: 设置请求路径。
  • RedirectTo: 重定向请求。
  • Retry: 请求失败时重试。
  • RequestRateLimiter: 请求限流。
spring:
  cloud:
    gateway:
      routes:
        - id: rewrite_route
          uri: https://example.com
          predicates:
            - Path=/oldpath/**
          filters:
            - RewritePath=/oldpath/(?<segment>.*), /newpath/${segment}

组合多个谓词

Spring Cloud Gateway支持使用多个谓词组合来匹配请求,所有谓词必须都满足时,路由才会生效。

spring:
  cloud:
    gateway:
      routes:
        - id: complex_route
          uri: https://example.com
          predicates:
            - Path=/example/**
            - Method=GET
            - Header=MyHeader, my-value

在这个配置中,只有请求路径是/example/**、HTTP方法是GET,并且请求头MyHeader的值是my-value时,路由才会匹配。

全局过滤器

全局过滤器作用于所有路由,通常用于实现通用功能,如日志记录、身份认证、跨域处理等。

import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;

@Component
public class CustomGlobalFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("Global Pre Filter executed");
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            System.out.println("Global Post Filter executed");
        }));
    }
}

动态路由

Spring Cloud Gateway支持动态路由配置,可以通过编程方式在运行时添加、修改或删除路由。这种方式适用于需要根据外部条件(如数据库配置、服务发现等)实时调整路由的场景。

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("path_route", r -> r.path("/example/**")
                        .uri("https://example.com"))
                .build();
    }
}

总结

Spring Cloud Gateway提供了丰富且灵活的路由配置方式,可以通过谓词、过滤器、全局过滤器以及动态路由等功能满足各种复杂的路由需求。正确地配置和使用这些选项可以确保API网关在微服务架构中的高效、安全运行。


http://www.kler.cn/a/290178.html

相关文章:

  • 数字后端教程之Innovus report_property和get_property使用方法及应用案例
  • 1.7 JS性能优化
  • Linux基础1
  • 开发语言中,堆区和栈区的区别
  • AI大模型开发架构设计(18)——基于大模型构建企业知识库案例实战
  • 陪诊问诊APP开发实战:基于互联网医院系统源码的搭建详解
  • 谷粒商城实战笔记-285~290-分布式事务
  • 设计模式 18 备忘录模式
  • LeetCode的高频SQL50题(基础版)学习笔记
  • 惠中科技RDS自清洁膜层:光伏领域的绿色革命
  • Spark MLlib模型训练—回归算法 Survival Regression
  • 【Selenium】Selenium运行时报cannot find Chrome binary错误的解决办吧
  • linux之网络子系统-MAC帧、数据报、段 的头部信息
  • 【C++】如何解决“pointer to incomplete class type is not allowed”。
  • 一篇文章讲清楚什么是Spring AOP
  • 从汇编角度分析C语言中的局部变量是如何产生的
  • pikachu文件包含漏洞靶场通关攻略
  • 运维管理体系及其实践要点:为高效运维保驾护航
  • zabbix通过OMSA监控Dell服务器_zabbix dell http
  • 为什么我会有使用gradle,需要花长时间去下载依赖?使用maven就不会有这种感受?
  • c++ websocket简单讲解
  • 大势智慧携“实景三维+AI”信创产品体系亮相2024中国地理信息产业大会
  • 详解 HTTPS 与 TLS证书链校验
  • 避坑之:深信服AC跨三层取MAC(核心交换机是锐捷S7808C_RGOS 11.0(4)B2P1)
  • 实验室ICPR 2024论文分享┆DS MYOLO:一种基于状态空间模型的驾驶场景可靠目标检测器
  • Edge资源占用优化:调整浏览器设置与关闭自动更新检查