问题产生背景
在使用Spring Cloud Gateway过程中,希望配置多Routes映射不同的微服务,因为Gateway 和Zuul的访问路径不同(zuul 会带有服务service Id),造成错误。
现象表现
问题定位
- 认为是配置Predicate问题。
routes:
- id: after_route
uri: lb://user-center
predicates:
# 当当前时间晚于设置时间之后,才能访问
# 否则得到404错误
#- After=2010-01-01T18:00:00.789-07:00[America/Denver]
# 当Host属于**.geekplus.com.cn或**.life-runner.com时
# http://localhost:9999/** -> user-center/**
# eg. http://localhost:9999/users/1 -> user-center/users/1
#- Host=**.geekplus.com.cn,**.life-runner.com
- TimeBetween=上午6:00,下午11:00
- Path=/users/**
filters:
- AddRequestHeader=CompanyKey,123456
- AddResponseHeader=Success,Isaac
- PreLog=CustomLogKey,CustomLogValue
- id: content_route
uri: lb://shared-center
- After=2010-01-01T18:00:00.789-07:00[America/Denver]
- Path=/share/**
filters:
- AddRequestHeader=CompanyKey,123456
- AddResponseHeader=Success,Isaac
- PreLog=CustomLogKey,CustomLogValue
- 认为是顺序问题
routes:
- id: content_route
uri: lb://shared-center
predicates:
- Path=/share/**
- id: after_route
uri: lb://user-center
predicates:
# 当当前时间晚于设置时间之后,才能访问
- TimeBetween=上午6:00,下午11:00
- Path=/users/**
filters:
- AddRequestHeader=CompanyKey,123456
- AddResponseHeader=Success,Isaac
- PreLog=CustomLogKey,CustomLogValue
- 以为自己写错了。
四处寻求帮助,无奈,Gateway的资料网上真的很少。还是自食其力吧,根据错误信息,查看Nacos中元数据,发现异常!
问题结论
- gateway 和 user-center 都进行过重启,因为重启后,服务Ip发生了变更,在服务注册中心这两个ip相同,因此可以访问。
2,shared-center 我长时间没有重启,注册在发现中心的ip 是老的Ip,和gateway/user-center的IP不同,造成请求失败。
具体如下:
shared-center: 172.16.33.167
user-center & gateway : 172.16.29.0
解决方法,重启shared-center,重新获取实例Ip,结果恢复正常!
Tips
我使用的是Spring Cloud Alibaba Nacos作为服务发现中心,在重启内容服务之后,发现中心的失败IPservice并没有被刷新,需要手动处理一下,否则依旧会调用到老的IP。
奔跑的人生 | 博客园 | segmentfault | spring4all | csdn | 掘金 | OSChina | 简书 | 头条 | 知乎 | 51CTO