服务调用 Feign
yudao-spring-boot-starter-rpc
(opens new window) 技术组件,基于 Feign 实现服务之间的调用。
为什么不使用 Dubbo 呢?
Feign 通用性更强,学习成本更低,对于绝大多数场景,都能够很好的满足需求。虽然 Dubbo 提供的性能更强,特性更全,但都是非必须的。
目前国内 95% 左右都是采用 Feign,而 Dubbo 的使用率只有 5% 左右。所以,我们也选择了 Feign。
如果你对 Feign 了解较少,可以阅读 《芋道 Spring Cloud 声明式调用 Feign 入门》 (opens new window) 系统学习。
# 1. RPC 使用规约
本小节,我们来讲解下项目中 RPC 使用的规约。
# 1.1 API 前缀
API 使用 HTTP 协议,所有的 API 前缀,都以 /rpc-api
(opens new window) 开头,方便做统一的全局处理。
# 1.2 API 权限
服务之间的调用,不需要进行权限校验,所以需要在每个服务的 SecurityConfiguration 权限配置类中,添加如下配置:
1 |
|
# 1.3 API 全局返回
所有 API 接口返回使用 CommonResult ( opens new window) 返回,和前端 RESTful API 保持统一。例如说:
1 |
|
# 1.4 用户传递
服务调用时,已经封装
Feign 将用户信息通过 HTTP 请求头 login-user
传递,通过
LoginUserRequestInterceptor (
opens new window) 类实现。
这样,被调用服务,可以通过 SecurityFrameworkUtils 获取到用户信息,例如说:
#getLoginUser()
方法,获取当前用户。#getLoginUserId()
方法,获取当前用户编号。
# 2. 如何定义一个 API 接口
本小节,我们来讲解下如何定义一个 API 接口。以 AdminUserApi 提供的 getUser 接口来举例子。
# 2.1 服务提供者
AdminUserApi 由 system-server
服务所提供。
# 2.1.1 ApiConstants
在 yudao-module-system-api
模块,创建
ApiConstants (
opens new window) 类,定义 API 相关的枚举。代码如下:
1 |
|
# 2.1.2 AdminUserApi
在 yudao-module-system-api
模块,创建
AdminUserApi (
opens new window) 类,定义 API 接口。代码如下:
1 |
|
另外,需要创建 AdminUserRespDTO (opens new window) 类,定义用户 Response DTO。代码如下:
1 |
|
# 2.1.3 AdminUserRpcImpl
在 yudao-module-system-biz
模块,创建
AdminUserRpcImpl (
opens new window) 类,实现 API 接口。代码如下:
1 |
|
# 2.2 服务消费者
bpm-server
服务,调用了 AdminUserApi
接口。
# 2.2.1 引入依赖
在 yudao-module-bpm-biz
模块的
pom.xml
(
opens new window),引入 yudao-module-system-api
模块的依赖。代码如下:
1 |
|
# 2.2.2 引用 API
在
yudao-module-bpm-biz
模块,创建
RpcConfiguration (
opens new window) 配置类,注入 AdminUserApi 接口。代码如下:
1 |
|
# 2.2.3 调用 API
例如说, BpmTaskServiceImpl ( opens new window) 调用了 AdminUserApi 接口,代码如下:
1 |
|