Spring Cloud API Gateway路由转application.yml配置失效问题排查
Spring Cloud Gateway YAML路由配置失效问题排查与修复
原YAML配置中的问题
- 缩进错误:
discovery节点属于spring.cloud.gateway的子节点,但原配置中它和gateway同级,导致服务发现相关配置无法被网关识别。 - 语法格式错误:
lower-case-service-id=true不符合YAML键值对规范,正确写法应为lower-case-service-id: true(冒号后必须加空格)。 - 多余引号:
Path=/currency-exchange/**"末尾的双引号会导致路径匹配规则解析失败;RewritePath中的表达式末尾也多了一个双引号,造成过滤器语法错误。 - 缺失路由规则:原Java配置中包含的
/get路由(带请求头和请求参数添加逻辑)在YAML中未配置,导致该路由无法生效。
修复后的完整application.yml配置
spring: application: name: api-gateway cloud: gateway: discovery: locator: enabled: true lower-case-service-id: true routes: # 对应原Java中的/get路由,添加自定义请求头和参数 - id: httpbin-get uri: http://httpbin.org:80 predicates: - Path=/get filters: - AddRequestHeader=MyHeader, MyURI - AddRequestParameter=Param, MyValue # 货币兑换服务路由 - id: currency-exchange uri: lb://currency-exchange predicates: - Path=/currency-exchange/** # 货币转换服务路由 - id: currency-conversion uri: lb://currency-conversion predicates: - Path=/currency-conversion/** # Feign方式货币转换路由 - id: currency-conversion-feign uri: lb://currency-conversion predicates: - Path=/currency-conversion-feign/** # 自定义路径重写路由 - id: currency-conversion-custom-path uri: lb://currency-conversion predicates: - Path=/currency-conversion-new/** filters: - RewritePath=/currency-conversion-new/(?<segment>.*), /currency-conversion-feign/${segment} server: port: ${app_port} eureka: client: service-url: defaultZone: http://localhost:8761/eureka
关键注意事项
- YAML对缩进要求严格,所有子节点必须对齐到父节点的缩进层级下,否则配置会失效。
- Spring Cloud Gateway的过滤器、断言名称区分大小写,需严格遵循官方规范(如
AddRequestHeader、RewritePath)。 lb://前缀表示启用负载均衡,需确保对应服务已在Eureka注册中心完成注册。
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

