服务调用链路
简要介绍下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 还会拉取路由信息。因此如果路由找不到时,检查表中是否有路由信息,没有可通过配置中心手动添加,再调用通知接口通知服务刷新路由和配置信息。