业务处理阶段说明.md
5.38 KB
业务处理阶段说明
阶段概述
业务处理阶段是网关调度的核心业务逻辑执行环节,负责创建数据流、加载配置、权限校验并最终调用下游微服务。通过ApiServiceSMOImpl实现完整的业务处理流程。
核心组件
- ApiServiceSMOImpl: 业务处理核心实现类
- ApiDataFlow: 数据流处理对象
- AppService: 应用服务配置
- dealCmd方法: 微服务调用方法
处理流程
1. 数据流创建
- 创建ApiDataFlow数据流对象
- 初始化请求数据和头信息
- 设置业务处理上下文
2. 配置加载
- 加载应用路由配置信息
- 根据服务编码找到对应的AppService
- 解析服务映射关系
3. 权限校验
- 在业务层面进行最终权限验证
- 验证用户在当前业务上下文中的权限
- 检查数据权限范围
4. 微服务调用
- 通过dealCmd方法调用下游微服务
- 传递数据流对象到业务系统
- 处理业务逻辑执行
代码示例
ApiServiceSMOImpl核心实现
@Component
public class ApiServiceSMOImpl implements IApiServiceSMO {
@Override
public ResponseEntity<String> service(String reqJson, Map<String, String> headers) {
try {
// 1. 创建数据流对象
ApiDataFlow dataFlow = new ApiDataFlow();
dataFlow.setReqData(reqJson);
dataFlow.setHeaders(headers);
// 2. 解密请求报文(POST/PUT方法)
if (isEncryptedRequest(headers)) {
dataFlow.setReqData(decrypt(reqJson, headers));
}
// 3. 加载配置信息
loadAppRouteConfig(dataFlow);
// 4. 权限校验
validateBusinessPermission(dataFlow);
// 5. 调用下游业务系统
return callMicroService(dataFlow);
} catch (Exception e) {
logger.error("业务处理失败", e);
return ResultVo.error("业务处理异常: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
private void loadAppRouteConfig(ApiDataFlow dataFlow) {
// 根据服务编码加载应用路由配置
String service = dataFlow.getHeaders().get(CommonConstant.HTTP_SERVICE);
AppService appService = appRouteConfig.getAppService(service);
dataFlow.setAppService(appService);
}
private ResponseEntity<String> callMicroService(ApiDataFlow dataFlow) {
// 调用下游微服务的dealCmd方法
AppService appService = dataFlow.getAppService();
return appService.dealCmd(dataFlow);
}
}
数据流对象定义
public class ApiDataFlow {
private String reqData; // 请求数据
private Map<String, String> headers; // 请求头信息
private AppService appService; // 应用服务配置
private Object responseData; // 响应数据
// getter和setter方法
}
应用服务配置
public class AppService {
private String serviceCode; // 服务编码
private String serviceName; // 服务名称
private String targetService; // 目标服务
private String targetMethod; // 目标方法
public ResponseEntity<String> dealCmd(ApiDataFlow dataFlow) {
// 调用具体微服务的业务逻辑
// 返回处理结果
}
}
关键配置
服务编码映射配置
app-routes:
services:
user.listUser:
targetService: service-user
targetMethod: listUser
community.queryCommunities:
targetService: service-community
targetMethod: queryCommunities
数据流配置
// 数据流处理配置
dataFlow.setTimeout(30000); // 超时时间30秒
dataFlow.setRetryCount(3); // 重试次数
业务处理机制
1. 服务编码解析
- 解析
资源.操作格式的服务编码 - 映射到具体的微服务和操作方法
- 支持服务版本管理
2. 请求数据解密
- 对加密的POST/PUT请求进行解密
- 支持多种加密算法
- 密钥管理机制
3. 配置动态加载
- 支持热更新的路由配置
- 服务发现和负载均衡
- 故障转移机制
4. 业务权限验证
- 验证用户在具体业务中的权限
- 数据权限范围控制
- 业务规则校验
异常处理
配置加载异常
try {
loadAppRouteConfig(dataFlow);
} catch (InitConfigDataException e) {
logger.error("配置加载失败", e);
return ResultVo.error("服务配置异常", HttpStatus.INTERNAL_SERVER_ERROR);
}
业务权限异常
try {
validateBusinessPermission(dataFlow);
} catch (BusinessPermissionException e) {
logger.error("业务权限验证失败", e);
return ResultVo.error("业务权限不足", HttpStatus.FORBIDDEN);
}
微服务调用异常
try {
return callMicroService(dataFlow);
} catch (ServiceTimeoutException e) {
logger.error("服务调用超时", e);
return ResultVo.error("服务响应超时", HttpStatus.REQUEST_TIMEOUT);
}
技术要点
- 数据流模式: 通过ApiDataFlow对象传递处理上下文
- 配置驱动: 基于配置的服务路由机制
- 插件架构: 支持可扩展的业务处理插件
- 事务管理: 分布式事务支持
性能优化
- 路由配置缓存
- 连接池复用
- 请求数据压缩
- 异步处理支持