news 2026/2/28 9:44:53

spring-gateway配置详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spring-gateway配置详解

一、核心配置结构总览

spring:cloud:gateway:# 1. 全局配置default-filters:[]globalcors:{}httpclient:{}metrics:{}# 2. 路由配置routes:-id:uri:predicates:[]filters:[]metadata:{}order:0# 3. 发现服务配置discovery:locator:enabled:false# 4. 路由定义存储route:locator:cache:enabled:true

二、全局配置详解

  1. 全局过滤器

    spring:cloud:gateway:default-filters:-AddRequestHeader=X-Request-Global,Global-Value-AddResponseHeader=X-Response-Global,Global-Value-DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin-name:RequestRateLimiterargs:redis-rate-limiter.replenishRate:10redis-rate-limiter.burstCapacity:20key-resolver:"#{@ipKeyResolver}"
  2. 全局CORS配置

    spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowed-origins:"https://example.com"allowed-methods:-GET-POST-PUT-DELETE-OPTIONSallowed-headers:-Content-Type-Authorizationexposed-headers:-X-Custom-Headerallow-credentials:truemax-age:3600
  3. HTTP客户端配置

    spring:cloud:gateway:httpclient:# 连接池配置pool:type:ELASTIC# 连接池类型: ELASTIC, FIXEDmax-connections:1000# 最大连接数acquire-timeout:45000# 获取连接超时(ms)# SSL配置ssl:use-insecure-trust-manager:falsetrusted-x509-certificates:[]handshake-timeout:10000close-notify-flush-timeout:3000close-notify-read-timeout:0# 代理配置proxy:host:proxy.example.comport:8080username:userpassword:pass# 响应压缩compression:true
  4. WebFlux配置

    spring:cloud:gateway:# WebFlux配置httpclient:# 响应式客户端配置response-timeout:60sconnect-timeout:30smax-header-size:65536max-chunk-size:65536max-initial-line-length:4096# WebSocket支持websocket:max-frame-payload-length:65536
  5. uri配置详解

    uri:lb://user-service# 负载均衡到服务uri:http://localhost:8080# 直接URLuri:https://example.com# HTTPS地址uri:ws://service:8080# WebSocket

三、路由配置详解

  1. 完整路由定义

    spring:cloud:gateway:routes:-id:user-service-v1uri:lb://user-servicepredicates:# 多重条件-Path=/api/v1/users/**-Method=GET,POST-Header=X-API-Version,v1-Query=type,internal-Cookie=session,.*-After=2024-01-01T00:00:00+08:00-Weight=user-group,80filters:# 请求预处理-StripPrefix=2-PrefixPath=/internal-SetPath=/api/users/{segment}-RewritePath=/old/(?<path>.*),/new/$\{path}# 参数处理-AddRequestParameter=key,value-AddRequestHeader=X-Request-Id,12345-RemoveRequestHeader=Cookie# 响应处理-AddResponseHeader=X-Response-Time,${took}-DedupeResponseHeader=Set-Cookie# 熔断降级-name:CircuitBreakerargs:name:userServiceCBfallbackUri:forward:/fallback/userstatusCodes:-500-502-503# 重试机制-name:Retryargs:retries:3statuses:SERVICE_UNAVAILABLEmethods:GETbackoff:firstBackoff:10msmaxBackoff:50msfactor:2basedOnPreviousValue:false# 请求大小限制-name:RequestSizeargs:maxSize:5MB# 修改响应体-name:ModifyResponseBodyargs:in-class:Stringout-class:Stringrewrite-function:"#{@modifyResponseBody}"metadata:# 自定义元数据version:"1.0"timeout:5000connect-timeout:3000response-timeout:10000max-auto-retries-next-server:2max-auto-retries:1order:1
  2. 断言工厂详细配置

    Path断言:

    predicates:-Path=/api/users/{id}/**,/api/orders/{segment}

    Header断言:

    predicates:-name:Headerargs:header:X-Request-Idregexp:'\d+'

    自定义断言:

    predicates:-name:Customargs:name:myCustomPredicatearg1:value1arg2:value2
  3. 过滤器工厂详细配置

    熔断器配置:

    filters:-name:CircuitBreakerargs:name:myCircuitBreakerfallbackUri:forward:/fallbackstatusCodes:-500-"BAD_GATEWAY"-"5xx"args:failureRateThreshold:50slowCallDurationThreshold:"2s"permittedNumberOfCallsInHalfOpenState:10slidingWindowSize:100minimumNumberOfCalls:10waitDurationInOpenState:"60s"

    限流配置:

    filters:-name:RequestRateLimiterargs:key-resolver:"#{@userKeyResolver}"rate-limiter:"#{@redisRateLimiter}"deny-empty-key:trueempty-key-status:403# Redis限流器配置@Bean public RedisRateLimiter redisRateLimiter(){return new RedisRateLimiter(10,20,1);}

四、发现服务配置

  1. 服务发现自动路由

    spring:cloud:gateway:discovery:locator:enabled:truelower-case-service-id:truepredicates:-name:Pathargs:pattern:"'/service/'+serviceId.toLowerCase()+'/**'"filters:-name:RewritePathargs:regexp:"'/service/' + serviceId.toLowerCase() + '/(?<remaining>.*)'"replacement:"'/${remaining}'"
  2. 服务发现元数据路由

    spring:cloud:gateway:discovery:locator:enabled:trueinclude-expression:metadata['version']=='v1'url-expression:"'http://'+serviceId.toLowerCase()+'.example.com'"

五、监控和指标配置

  1. Micrometer指标

    management:endpoints:web:exposure:include:health,info,gateway,metrics,prometheusmetrics:tags:application:${spring.application.name}spring:cloud:gateway:metrics:enabled:true# 自定义标签tags:path:"${routeId}"method:"${request.method}"status:"${response.status}"
  2. 跟踪配置

    spring:sleuth:gateway:enabled:trueweb:client:enabled:truezipkin:base-url:http://localhost:9411

六、安全配置

  1. SSL/TLS配置

    server:ssl:enabled:truekey-store:classpath:keystore.p12key-store-password:changeitkey-store-type:PKCS12key-alias:gatewaykey-password:changeitspring:cloud:gateway:httpclient:ssl:use-insecure-trust-manager:falsehandshake-timeout:10000
  2. 安全头配置

    spring:cloud:gateway:default-filters:-name:SecureHeadersargs:xss-protection-header:1; mode=blockstrict-transport-security:max-age=31536000 ; includeSubDomainsx-frame-options:DENYcontent-type-options:nosniffreferrer-policy:no-referrercontent-security-policy:default-src 'self'

七、缓存和性能优化

  1. 路由缓存配置

    spring:cloud:gateway:route:locator:cache:enabled:trueinitial-capacity:100maximum-size:1000ttl:60s
  2. 连接池优化

    spring:cloud:gateway:httpclient:pool:type:FIXEDmax-connections:500max-idle-time:30smax-life-time:60spending-acquire-timeout:60spending-acquire-max-count:1000eviction-interval:10s

八、完整配置示例

生产环境配置示例

spring:application:name:api-gatewaycloud:gateway:# 全局配置default-filters:-AddRequestHeader=X-Gateway-Request-ID,${random.uuid}-AddResponseHeader=X-Gateway-Response-Time,${took}-DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin# 全局CORSglobalcors:cors-configurations:'[/**]':allowed-origins:"*"allowed-methods:"*"allowed-headers:"*"max-age:3600# HTTP客户端配置httpclient:pool:type:ELASTICmax-connections:1000acquire-timeout:45000connect-timeout:5000response-timeout:30000compression:true# 路由配置routes:-id:auth-serviceuri:lb://auth-servicepredicates:-Path=/auth/**-Method=POSTfilters:-StripPrefix=1-name:RequestRateLimiterargs:key-resolver:"#{@ipKeyResolver}"redis-rate-limiter.replenishRate:5redis-rate-limiter.burstCapacity:10-CircuitBreaker=authService-id:user-serviceuri:lb://user-servicepredicates:-Path=/api/users/**-Header=X-API-Token,.+filters:-StripPrefix=2-AddRequestHeader=X-Service-Version,v2-Retry=3-id:product-serviceuri:lb://product-servicepredicates:-Path=/api/products/**-Query=categoryfilters:-StripPrefix=2-SetStatus=401,POST# 服务发现discovery:locator:enabled:truelower-case-service-id:true# 指标metrics:enabled:true# 监控端点management:endpoints:web:exposure:include:health,info,gateway,metricsmetrics:export:prometheus:enabled:trueendpoint:health:show-details:always

九、自定义配置扩展

  1. 自定义过滤器

    @ComponentpublicclassCustomGlobalFilterimplementsGlobalFilter,Ordered{@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){// 前置处理ServerHttpRequestrequest=exchange.getRequest().mutate().header("X-Custom-Header","custom-value").build();returnchain.filter(exchange.mutate().request(request).build()).then(Mono.fromRunnable(()->{// 后置处理LongstartTime=exchange.getAttribute("startTime");if(startTime!=null){LongendTime=System.currentTimeMillis();System.out.println("请求耗时: "+(endTime-startTime)+"ms");}}));}@OverridepublicintgetOrder(){return-1;}}
  2. 自定义断言工厂

    @ComponentpublicclassCustomRoutePredicateFactoryextendsAbstractRoutePredicateFactory<CustomRoutePredicateFactory.Config>{publicCustomRoutePredicateFactory(){super(Config.class);}@OverridepublicPredicate<ServerWebExchange>apply(Configconfig){returnexchange->{// 自定义断言逻辑returnconfig.getValue().equals(exchange.getRequest().getHeaders().getFirst("X-Custom"));};}publicstaticclassConfig{privateStringvalue;// getters and setters}}

十、配置优化建议

  • 性能调优:

    • 根据负载调整连接池大小
    • 启用响应压缩
    • 合理设置超时时间
  • 高可用:

    • 配置多个相同服务实例
    • 设置合理的熔断和重试策略
    • 启用健康检查
  • 安全性:

    • 启用HTTPS
    • 配置安全响应头
    • 实施API限流
  • 可观测性:

    • 启用指标收集
    • 集成分布式跟踪
    • 配置详细日志
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 6:09:24

Multisim14.3安装图文教程:超详细版配置过程

Multisim 14.3 安装全攻略&#xff1a;从零开始&#xff0c;一次成功的实战部署指南你是不是也曾在安装 Multisim 的时候&#xff0c;被“License not found”、“Error 1722”这些弹窗搞得焦头烂额&#xff1f;明明按照网上的教程一步步来&#xff0c;结果软件就是打不开&…

作者头像 李华
网站建设 2026/2/23 1:54:12

物理化学公式应用:解决复杂计算

物理化学公式应用&#xff1a;解决复杂计算 在实验室里&#xff0c;你是否曾为推导一个热力学方程耗费数小时&#xff1f;面对密密麻麻的Arrhenius、Nernst或van’t Hoff公式&#xff0c;是否一度怀疑自己是不是该先去考个“记忆大师”证书&#xff1f;更别提当实验数据到手后&…

作者头像 李华
网站建设 2026/2/25 21:24:41

21、数据访问与处理:从FoxPro到Visual Basic .NET的技术探索

数据访问与处理:从FoxPro到Visual Basic .NET的技术探索 在数据处理和应用开发领域,不同的编程语言和工具提供了丰富多样的功能来满足各种需求。本文将深入探讨FoxPro和Visual Basic .NET在数据访问方面的特性和应用,包括CursorAdapter、XMLAdapter的使用,以及如何在Visua…

作者头像 李华
网站建设 2026/2/27 7:08:20

23、《.NET 中的数据访问与 XML 技术详解》

《.NET 中的数据访问与 XML 技术详解》 1. 数据表行与列操作 在处理数据表时,每一行都包含一个列的集合。以下是一段用于打印表中所有行的代码: Private Sub PrintValues(ByVal myTable As DataTable)Dim myRow As DataRowDim myColumn As DataColumnFor Each myRow In m…

作者头像 李华
网站建设 2026/2/22 10:46:23

30、屏幕设计与数据处理技巧

屏幕设计与数据处理技巧 在屏幕设计和数据处理方面,有许多实用的技巧和方法可以提升应用程序的功能和用户体验。下面将详细介绍一些相关的技术和代码示例。 自定义网格 如果对现有的网格设置不满意,编写自定义的网格并不困难。以下是一个自定义网格的代码示例: PROCEDU…

作者头像 李华
网站建设 2026/2/22 14:45:03

弓乙图 宇宙星系的演化本源

这一篇文章直接让你明白宇宙的道是如何演化运行的&#xff0c;也就是说宇宙星辰演化&#xff0c;对&#xff0c;你没听错&#xff0c;演化出河图洛书的源头跟它的兄弟姊妹都是小意思&#xff0c;这一篇文章直接带你了解宇宙星辰的运行。 一定不要用八卦的理念套用进去&#xff…

作者头像 李华