news 2026/5/26 15:26:44

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/5/26 14:36:43

基于微信小程序的博物馆文创系统的设计与实现毕设源码+文档+讲解视频

前言 本课题聚焦博物馆文创产品传播与销售数字化需求&#xff0c;设计开发基于微信小程序的博物馆文创系统。项目以SpringBoot作为后端核心框架&#xff0c;搭配MySQL实现文创产品信息、订单数据、用户信息、博物馆馆藏关联资料等的持久化存储&#xff0c;通过Redis优化热门文创…

作者头像 李华
网站建设 2026/5/26 14:36:47

C++高性能服务器框架----Http模块

Http模块1. 主要功能封装了HTTP请求和响应协议&#xff08;HttpRequest和HttpResponse&#xff09;使用nodejs的htpp_parser实现了HTTP请求、响应解析&#xff08;HttpRequestParser和HttpResponseParser&#xff09;实现了uri解析&#xff08;Uri&#xff09;封装了HTTP会话&a…

作者头像 李华
网站建设 2026/5/26 14:37:01

36、利用 Crystal Reports 进行报表开发全解析

利用 Crystal Reports 进行报表开发全解析 1. 参数的使用 在 Crystal Reports 中,仅仅定义参数是不够的,还需要在选择公式中使用它。具体操作步骤如下: 1. 在表单上非字段或标签的任意位置右键单击,从上下文菜单中选择“Report” -> “Edit Selection Formula” ->…

作者头像 李华
网站建设 2026/5/13 22:33:59

邀请好友奖励:病毒式传播增长引擎

邀请好友奖励&#xff1a;病毒式传播增长引擎 在AI工具正从“炫技”走向“实用”的今天&#xff0c;一个有趣的现象正在发生&#xff1a;越来越多的用户不再满足于使用通用聊天机器人&#xff0c;而是开始搭建属于自己的智能知识库——能读文档、会溯源、懂业务&#xff0c;甚…

作者头像 李华
网站建设 2026/5/16 15:18:57

用户评价回复:展现贴心服务态度

Anything-LLM&#xff1a;构建可信、高效的私有化智能知识系统 在企业知识管理正经历深刻变革的今天&#xff0c;一个普遍存在的困境是&#xff1a;信息越来越多&#xff0c;但“知道在哪里”却越来越难。员工翻遍邮件、共享盘和聊天记录仍找不到一份关键制度文档&#xff1b;…

作者头像 李华
网站建设 2026/5/21 14:46:26

硬件工程师必看的PCB生产流程协同指南

硬件工程师如何与PCB工厂“无缝对话”&#xff1f;——一份来自产线的实战协同指南你有没有遇到过这样的情况&#xff1a;辛辛苦苦画完板子&#xff0c;信心满满地发给PCB厂打样&#xff0c;结果三天后收到一封邮件&#xff1a;“贵司设计存在DFM风险&#xff0c;建议修改……”…

作者头像 李华