Spring Cloud Gateway 之请求坑位[微服务IP不同请求会失败]

问题产生背景

在使用Spring Cloud Gateway过程中,希望配置多Routes映射不同的微服务,因为Gateway 和Zuul的访问路径不同(zuul 会带有服务service Id),造成错误。

现象表现

file

问题定位

  1. 认为是配置Predicate问题。

    1 routes: 2 - id: after_route 3 uri: lb://user-center 4 predicates: 5 # 当当前时间晚于设置时间之后,才能访问 6 # 否则得到404错误 7 #- After=2010-01-01T18:00:00.789-07:00[America/Denver] 8 # 当Host属于**.geekplus.com.cn或**.life-runner.com时 9 # http://localhost:9999/** -> user-center/** 10 # eg. http://localhost:9999/users/1 -> user-center/users/1 11 #- Host=**.geekplus.com.cn,**.life-runner.com 12 - TimeBetween=上午6:00,下午11:00 13 - Path=/users/** 14 filters: 15 - AddRequestHeader=CompanyKey,123456 16 - AddResponseHeader=Success,Isaac 17 - PreLog=CustomLogKey,CustomLogValue 18 - id: content_route 19 uri: lb://shared-center 20 - After=2010-01-01T18:00:00.789-07:00[America/Denver] 21 - Path=/share/** 22 filters: 23 - AddRequestHeader=CompanyKey,123456 24 - AddResponseHeader=Success,Isaac 25 - PreLog=CustomLogKey,CustomLogValue
  2. 认为是顺序问题

    1 routes: 2 - id: content_route 3 uri: lb://shared-center 4 predicates: 5 - Path=/share/** 6 - id: after_route 7 uri: lb://user-center 8 predicates: 9 # 当当前时间晚于设置时间之后,才能访问 10 - TimeBetween=上午6:00,下午11:00 11 - Path=/users/** 12 filters: 13 - AddRequestHeader=CompanyKey,123456 14 - AddResponseHeader=Success,Isaac 15 - PreLog=CustomLogKey,CustomLogValue
  3. 以为自己写错了。

四处寻求帮助,无奈,Gateway的资料网上真的很少。还是自食其力吧,根据错误信息,查看Nacos中元数据,发现异常!

问题结论

  1. 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。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

springcloud文件上传文件名乱码

问题multipartfile取出来的文件名中文乱码。排查问题:单独的server文件上传有无问题gateway访问文件上传有无问题gateway的/zuul访问是否有问题配置spring:http:encoding:charset:UTF

Spring Cloud Gateway 之请求坑位[微服务IP不同请求会失败] - HelloWorld