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

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限流
  • 可观测性:

    • 启用指标收集
    • 集成分布式跟踪
    • 配置详细日志
http://www.jsqmd.com/news/131614/

相关文章:

  • 本地运行大模型有多简单?试试这个anything-llm镜像
  • Vivado下载过程中许可证配置的正确姿势讲解
  • 18、传感器应用开发全解析
  • 数据分析师工作中会遇到哪些难题?
  • ESXI 虚机机硬盘类型和硬盘模式学习
  • 持续绩效管理推动组织变革的5个原因
  • 数学证明推导:一步步展示过程
  • 高速信号DRC规则优化:实战经验分享
  • 19、数据访问:Visual FoxPro与Visual Basic .NET的对比
  • 基于Hadoop大数据的出行方式推荐系统(毕设源码+文档)
  • NoteGen:轻量跨端笔记应用,搭配UpgradeLink系统,体验极致笔记之旅
  • Emuelec多平台安装对比:全面讲解常见方案
  • LVGL输入设备对接:触摸屏配置手把手教程
  • Vivado增量综合技术的应用实践指南
  • 基于微信小程序的博物馆文创系统的设计与实现毕设源码+文档+讲解视频
  • 图解说明变频器驱动程序安装步骤
  • 情感倾向判断:识别正面负面情绪
  • 小家电工厂如何用ESOP系统提升作业合规率?
  • 人工智能篇---导数与积分
  • 【ACM会议】第三届机器智能与数字化应用国际会议(MIDA 2026)
  • 多轮对话连贯性:记住之前的交流内容
  • 多操作系统下vivado安装包兼容性核心要点
  • 当使用 AutoTokenizer 加载百川(Baichuan)模型时出现 BaiChuanTokenizer 相关报错
  • 硬件工程师必看的PCB生产流程协同指南
  • 项目应用导向的Vivado下载建议:精简安装策略
  • risc-v五级流水线cpu指令对齐优化:解决取指错位问题
  • 基于微信小程序的档案宝系统毕设源码+文档+讲解视频
  • 工业级FPGA开发工具Vivado卸载实战案例解析
  • 基于SDR的FM接收机设计(GNU Radio实战)
  • 弓乙图 宇宙星系的演化本源