服务调用链路
简要介绍下HZERO基础服务之间的关系以及调用链路,以帮助解决微服务中的一些常见问题及服务配置管理等。下面的链路调用图主要包含7个基础服务以及一个业务服务,将从 API 访问网关开始介绍相关流程。可重点关注下gateway-helper中的权限校验流程。

① 访问网关、鉴权
- 
API 访问 gateway 网关服务,所有请求都会经过
GateWayHelperFilter过滤器,在过滤器中,会调用 gateway-helper 鉴权。 - 
进入 gateway-helper,根过滤器
RootServletFilter包含了一系列过滤器来对请求进行鉴权,将按图中的过滤器顺序进行校验,其中任何一步返回 false 都会直接返回。一般服务出现403、500等问题可先检查 hzero-gateway-helper 的日志,看是哪一步校验不通过。 - 
权限校验通过后,携带 Jwt 返回到 gateway。
 
② 获取用户信息
- 其中,
GetUserDetailsFilter会带着 access_token 访问 oauth 认证服务的/api/user接口获取用户信息,并转换成CustomUserDetails。之后,在AddJwtFilter里将 UserDetails 转成 Jwt。 
③ 访问API
- 
权限校验通过后,gateway 会将请求路由到具体的服务上,并带上 Jwt。
 - 
在服务内,
JwtTokenFilter将 Jwt 解析成CustomUserDetails,并放入SecurityContextHolder,代表用户在这个服务内已经登录,之后的程序中就可以通过DetailsHelper.getUserDetails()得到用户信息。若要开启此过滤器,需在启动类上配置@EnableChoerodonResourceServer注解开启此功能。 - 
之后返回数据,经过网关,再返回到前端。如果服务响应比较慢,就需要调整网关的超时时间。
 
④ 服务注册
- 服务启动时,会向 register 注册中心注册自己。服务注册成功后,
hzero-swagger、hzero-config、hzero-iam都会收到服务注册的消息,swagger 会刷新swagger文档信息,config 刷新服务路由,iam刷新权限。 
⑤ 获取服务文档
- 
swagger、config、iam 收到服务注册成功的消息后,会调用服务的
/v2/choerodon/api-docs接口获取服务文档信息。 - 
注意:拉取服务文档时,服务可能还未完成启动,默认配置会每隔
30秒拉取10次,如果10次后都没拉取到文档,就无法刷新路由等信息了,需手动调用接口刷新。 
⑥ 通知服务刷新配置
- config 中,服务路由或配置创建成功后,会调用服务
/choerodon/config接口通知服务刷新配置。 
⑦ 服务向配置中心获取配置
- 服务收到通知后,再向配置中心拉取配置,gateway、gateway-helper 还会拉取路由信息。因此如果路由找不到时,检查表中是否有路由信息,没有可通过配置中心手动添加,再调用通知接口通知服务刷新路由和配置信息。