业务处理阶段说明.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);
}

技术要点

  1. 数据流模式: 通过ApiDataFlow对象传递处理上下文
  2. 配置驱动: 基于配置的服务路由机制
  3. 插件架构: 支持可扩展的业务处理插件
  4. 事务管理: 分布式事务支持

性能优化

  • 路由配置缓存
  • 连接池复用
  • 请求数据压缩
  • 异步处理支持