服务注册后,swagger上没有找到该服务api
常见原因如下: 1. 网络或端口不通,swagger服务无法访问eureka上的该服务ip:port 2. 该服务未依赖org.hzero:hzero-starter-core 3. 该服务不存在context-path上下文,但在元数据中额外维护了上下文信息; 该服务存在context-path上下文,但在元数据中缺少上下文信息。
情况一,请根据自身环境原因排查解决。
情况二,请确保引入org.hzero:hzero-starter-core依赖。
情况三,请确保服务上下文与eureka元信息中的服务上下文对应。 以2.x版本spring boot为例: 服务上下文的配置项为
server:
servlet:
context-path: /hadm
则对应eureka元数据配置为
eureka:
instance:
# 服务的一些元数据信息
metadata-map:
CONTEXT: /hadm
Note: 对于不同的注册中心,都需要维护对应的元数据。如果不存在服务上下文,则对应元数据也不应存在上下文值。
服务注册后,通过swagger访问,访问不通
访问不通的常见报错如下: 1.routeNotFound 2.permission MisMatch 3.500 4.404 5.报错堆栈信息
情况一:
-
原因分析 routeNotFound代表数据库中不存在该路由信息。
-
解决方案 检查数据库中是否存在该路由,可在在【平台治理】->【服务路由】中手动维护路由信息,并刷新路由。
情况二:
-
原因分析 permission mismatch 代表权限规则未生效,而权限规则是维护在redis,所以可能是 (1)未拉取到权限信息。 (2)拉取到权限信息但刷新到redis失败。
-
解决方案 在swagger上找到hzero-admin的api,调用【动态刷新】中的/refresh/permission接口(推荐); 在swagger上找到hzero-iam的api,调用【权限刷新】中的/v1/permission/fresh接口。
情况三:
-
原因分析 500 一般是网络访问不通,则存在两种情况: (1)无法访问网关 (2)可以访问网关,但网关无法访问目标服务
-
解决方案 从网关和目标服务日志排查,首先判断出是哪个环节访问不同,然后根据自身环境情况解决。
情况三:
-
原因分析 由于是访问目标服务的api,则404代表网关访问目标服务api时响应404,表示目标服务不存在该api。
-
解决方案 可先在本地启动目标服务,从启动日志中查看是否存在该mapping信息,然后(不通过网关)直接访问该服务api,根据现象排查问题。 如果日志中不存在该mapping信息,则表示servlet容器未生成该mapping,一般原因是controller bean未扫描到; 如果日志中存在该mapping信息,但直接访问该api报404,则一般原因是忽略了服务上下文,需要根据情况调整路由配置stripPrefix属性。