Blame view

service-api/业务处理阶段说明.md 5.38 KB
88e030b7   王彪总   init project
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
  # 业务处理阶段说明
  
  ## 阶段概述
  业务处理阶段是网关调度的核心业务逻辑执行环节,负责创建数据流、加载配置、权限校验并最终调用下游微服务。通过ApiServiceSMOImpl实现完整的业务处理流程。
  
  ## 核心组件
  - **ApiServiceSMOImpl**: 业务处理核心实现类
  - **ApiDataFlow**: 数据流处理对象
  - **AppService**: 应用服务配置
  - **dealCmd方法**: 微服务调用方法
  
  ## 处理流程
  
  ### 1. 数据流创建
  - 创建ApiDataFlow数据流对象
  - 初始化请求数据和头信息
  - 设置业务处理上下文
  
  ### 2. 配置加载
  - 加载应用路由配置信息
  - 根据服务编码找到对应的AppService
  - 解析服务映射关系
  
  ### 3. 权限校验
  - 在业务层面进行最终权限验证
  - 验证用户在当前业务上下文中的权限
  - 检查数据权限范围
  
  ### 4. 微服务调用
  - 通过dealCmd方法调用下游微服务
  - 传递数据流对象到业务系统
  - 处理业务逻辑执行
  
  ## 代码示例
  
  ### ApiServiceSMOImpl核心实现
  ```java
  @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);
      }
  }
  ```
  
  ### 数据流对象定义
  ```java
  public class ApiDataFlow {
      private String reqData;           // 请求数据
      private Map<String, String> headers; // 请求头信息
      private AppService appService;    // 应用服务配置
      private Object responseData;      // 响应数据
      
      // getter和setter方法
  }
  ```
  
  ### 应用服务配置
  ```java
  public class AppService {
      private String serviceCode;       // 服务编码
      private String serviceName;       // 服务名称
      private String targetService;     // 目标服务
      private String targetMethod;      // 目标方法
      
      public ResponseEntity<String> dealCmd(ApiDataFlow dataFlow) {
          // 调用具体微服务的业务逻辑
          // 返回处理结果
      }
  }
  ```
  
  ## 关键配置
  
  ### 服务编码映射配置
  ```yaml
  app-routes:
    services:
      user.listUser:
        targetService: service-user
        targetMethod: listUser
      community.queryCommunities:
        targetService: service-community  
        targetMethod: queryCommunities
  ```
  
  ### 数据流配置
  ```java
  // 数据流处理配置
  dataFlow.setTimeout(30000);           // 超时时间30秒
  dataFlow.setRetryCount(3);            // 重试次数
  ```
  
  ## 业务处理机制
  
  ### 1. 服务编码解析
  - 解析 `资源.操作` 格式的服务编码
  - 映射到具体的微服务和操作方法
  - 支持服务版本管理
  
  ### 2. 请求数据解密
  - 对加密的POST/PUT请求进行解密
  - 支持多种加密算法
  - 密钥管理机制
  
  ### 3. 配置动态加载
  - 支持热更新的路由配置
  - 服务发现和负载均衡
  - 故障转移机制
  
  ### 4. 业务权限验证
  - 验证用户在具体业务中的权限
  - 数据权限范围控制
  - 业务规则校验
  
  ## 异常处理
  
  ### 配置加载异常
  ```java
  try {
      loadAppRouteConfig(dataFlow);
  } catch (InitConfigDataException e) {
      logger.error("配置加载失败", e);
      return ResultVo.error("服务配置异常", HttpStatus.INTERNAL_SERVER_ERROR);
  }
  ```
  
  ### 业务权限异常
  ```java
  try {
      validateBusinessPermission(dataFlow);
  } catch (BusinessPermissionException e) {
      logger.error("业务权限验证失败", e);
      return ResultVo.error("业务权限不足", HttpStatus.FORBIDDEN);
  }
  ```
  
  ### 微服务调用异常
  ```java
  try {
      return callMicroService(dataFlow);
  } catch (ServiceTimeoutException e) {
      logger.error("服务调用超时", e);
      return ResultVo.error("服务响应超时", HttpStatus.REQUEST_TIMEOUT);
  }
  ```
  
  ## 技术要点
  
  1. **数据流模式**: 通过ApiDataFlow对象传递处理上下文
  2. **配置驱动**: 基于配置的服务路由机制
  3. **插件架构**: 支持可扩展的业务处理插件
  4. **事务管理**: 分布式事务支持
  
  ## 性能优化
  - 路由配置缓存
  - 连接池复用
  - 请求数据压缩
  - 异步处理支持