• 服务注册后,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.报错堆栈信息

    情况一:

    1. 原因分析 routeNotFound代表数据库中不存在该路由信息。

    2. 解决方案 检查数据库中是否存在该路由,可在在【平台治理】->【服务路由】中手动维护路由信息,并刷新路由。

    情况二:

    1. 原因分析 permission mismatch 代表权限规则未生效,而权限规则是维护在redis,所以可能是 (1)未拉取到权限信息。 (2)拉取到权限信息但刷新到redis失败。

    2. 解决方案 在swagger上找到hzero-admin的api,调用【动态刷新】中的/refresh/permission接口(推荐); 在swagger上找到hzero-iam的api,调用【权限刷新】中的/v1/permission/fresh接口。

    情况三:

    1. 原因分析 500 一般是网络访问不通,则存在两种情况: (1)无法访问网关 (2)可以访问网关,但网关无法访问目标服务

    2. 解决方案 从网关和目标服务日志排查,首先判断出是哪个环节访问不同,然后根据自身环境情况解决。

    情况四:

    1. 原因分析 由于是访问目标服务的api,则404代表网关访问目标服务api时响应404,表示目标服务不存在该api。

    2. 解决方案 可先在本地启动目标服务,从启动日志中查看是否存在该mapping信息,然后(不通过网关)直接访问该服务api,根据现象排查问题。 如果日志中不存在该mapping信息,则表示servlet容器未生成该mapping,一般原因是controller bean未扫描到; 如果日志中存在该mapping信息,但直接访问该api报404,则一般原因是忽略了服务上下文,需要根据情况调整路由配置stripPrefix属性。