问题描述
记录项目中碰到的一个小问题。问题描述:测试工程师在测试项目过程中发现会时不时出现404,起初还不相信,后来验证发现确实,而且出现的频率不算太高。
配置及请求
GET: localhost:9000/v1/auth/info?token=xxx
访问错误信息如下:
{
"timestamp": "2021-06-29T06:46:35.477+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/auth/info"
}
gateway的yml配置:
routes:
- id: auth-service
uri: lb://auth-service
predicates:
- Path=/v1/auth/**
filters:
- StripPrefix=2
- id: bus-service
uri: lb://bus-service
predicates:
- Path=/v1/**
filters:
- StripPrefix=1
问题分析
起初出现问题,也不知道如何去定位,而且404没有更详细的日志,接口是经过网关访问Auth服务。
-
查询各种日志无果
-
后经验证发现不是Auth服务的问题,但是也很茫然,继续寻求定位问题的途径。
-
接着增加了Zipkin连续追踪,等待404大爷的到来~
-
查询404请求,此时发现了问题,解析的http.path是:
/auth/info
,但是我的auth-service
匹配的是StripPrefix=2
,匹配的路由难道不应该是/info
吗!
于是发现了问题所在:
在匹配/v1/auth/info
时,发现路由走了bus-service的/v1/**
,并没有按预想的途径进行。所以此时猜想:route下的书写顺序并不能保证路由的匹配优先级,查询到order配置,增加上即可。
结论:
gateway配置routes一定要增加order,数字越小优先级越高
反思原因:工具使用不熟练!