f
This commit is contained in:
183
deploy/sql/优化后的批量修改说明.md
Normal file
183
deploy/sql/优化后的批量修改说明.md
Normal file
@@ -0,0 +1,183 @@
|
||||
# 优化后的批量修改说明 - 使用ctx参数
|
||||
|
||||
## 优化说明
|
||||
|
||||
根据建议,我们通过 `ProcessRequests` 方法传入 `ctx context.Context` 参数,而不是在每个方法内部创建 `context.Background()`。
|
||||
|
||||
这样的好处:
|
||||
1. **符合Go最佳实践**:Context应该从上层传入
|
||||
2. **更好的控制**:可以统一控制请求超时、取消等
|
||||
3. **代码更简洁**:不需要在每个方法中重复创建context
|
||||
4. **更好的追踪**:可以统一传递追踪信息
|
||||
|
||||
## 已完成的修改
|
||||
|
||||
### 1. 修改了 ProcessRequests 方法签名
|
||||
```go
|
||||
func (a *ApiRequestService) ProcessRequests(ctx context.Context, params []byte, productID string) ([]byte, error)
|
||||
```
|
||||
- 移除了内部的 `ctx, cancel = context.WithCancel(context.Background())`
|
||||
- 直接使用外部传入的 `ctx`
|
||||
|
||||
### 2. 定义了 RequestProcessor 类型
|
||||
```go
|
||||
type RequestProcessor func(ctx context.Context, a *ApiRequestService, params []byte) ([]byte, error)
|
||||
```
|
||||
|
||||
### 3. 更新了 requestProcessors 映射
|
||||
所有方法签名的类型都更新为接收 `context.Context` 参数
|
||||
|
||||
### 4. 修改了 PreprocessRequestApi 方法
|
||||
```go
|
||||
func (a *ApiRequestService) PreprocessRequestApi(ctx context.Context, params []byte, apiID string) ([]byte, error) {
|
||||
if processor, exists := requestProcessors[apiID]; exists {
|
||||
return processor(ctx, a, params) // 传递ctx
|
||||
}
|
||||
return nil, errors.New("api请求, 未找到相应的处理程序")
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 修改了示例方法
|
||||
- `ProcessYYSYBE08Request` ✅ - 已添加 `ctx context.Context` 参数
|
||||
- `ProcessFLXG0V4BRequest` ✅ - 已添加 `ctx context.Context` 参数
|
||||
|
||||
## 需要完成的修改
|
||||
|
||||
现在还需要修改剩余30个方法的签名,在每个方法签名的 `params` 参数前添加 `ctx context.Context` 参数。
|
||||
|
||||
### 方法1:使用批量修改脚本(推荐)
|
||||
|
||||
#### Linux/Mac 环境
|
||||
```bash
|
||||
cd ycc-proxy-server
|
||||
chmod +x deploy/sql/批量修改方法签名.sh
|
||||
./deploy/sql/批量修改方法签名.sh
|
||||
```
|
||||
|
||||
这个脚本会:
|
||||
1. 备份 `apirequestService.go` 文件
|
||||
2. 批量修改31个方法的签名
|
||||
3. 显示修改统计
|
||||
|
||||
### 方法2:使用IDE查找替换(Windows环境推荐)
|
||||
|
||||
#### 步骤1:在IDE中打开查找替换
|
||||
打开 `apirequestService.go`,按 `Ctrl+H` 打开查找替换
|
||||
|
||||
#### 步骤2:查找并替换
|
||||
**查找内容:**
|
||||
```text
|
||||
func (a *ApiRequestService) Process(params []byte) ([]byte, error)
|
||||
```
|
||||
|
||||
**替换为:**
|
||||
```text
|
||||
func (a *ApiRequestService) Process(ctx context.Context, params []byte) ([]byte, error)
|
||||
```
|
||||
|
||||
**注意:**
|
||||
- 这个模式会匹配所有 `Process*Request` 方法
|
||||
- 点击"全部替换"即可
|
||||
|
||||
#### 步骤3:验证替换
|
||||
替换后,检查是否所有31个方法都成功修改。如果没有修改成功,可能是因为:
|
||||
1. 某些方法已经修改过了
|
||||
2. 方法签名格式有差异
|
||||
|
||||
### 方法3:逐个手动修改
|
||||
|
||||
如果批量方法不适用,可以逐个修改。需要修改的方法列表:
|
||||
|
||||
#### 已修改 ✅
|
||||
1. ProcessYYSYBE08Request
|
||||
2. ProcessFLXG0V4BRequest
|
||||
|
||||
#### 待修改 ⏳
|
||||
1. ProcessPersonEnterpriseProRequest (第312行)
|
||||
2. ProcessFLXG0687Request (第671行)
|
||||
3. ProcessFLXG3D56Request (第699行)
|
||||
4. ProcessIVYZ5733Request (第754行)
|
||||
5. ProcessIVYZ9A2BRequest (第810行)
|
||||
6. ProcessJRZQ0A03Request (第922行)
|
||||
7. ProcessJRZQ8203Request (第979行)
|
||||
8. ProcessJRZQ4AA8Request (第1036行)
|
||||
9. ProcessQYGL8271Request (第1085行)
|
||||
10. ProcessQYGL6F2DRequest (第1150行)
|
||||
11. ProcessQCXG7A2BRequest (第1191行)
|
||||
12. ProcessYYSY09CDRequest (第1211行)
|
||||
13. ProcessBehaviorRiskScanRequest (第1247行)
|
||||
14. ProcessDWBG8B4DRequest (第1314行)
|
||||
15. ProcessDWBG6A2CRequest (第1339行)
|
||||
16. ProcessJRZQ4B6CRequest (第1363行)
|
||||
17. ProcessJRZQ09J8Request (第1387行)
|
||||
18. ProcessJRZQ5E9FRequest (第1411行)
|
||||
19. ProcessQYGL3F8ERequest (第1433行)
|
||||
20. ProcessIVYZ81NCRequest (第1461行)
|
||||
21. ProcessIVYZ7F3ARequest (第1482行)
|
||||
22. ProcessDWBG7F3ARequest (第1505行)
|
||||
23. ProcessJRZQ8A2DRequest (第1528行)
|
||||
24. ProcessYYSY8B1CRequest (第1550行)
|
||||
25. ProcessYYSY7D3ERequest (第1569行)
|
||||
26. ProcessFLXG7E8FRequest (第1590行)
|
||||
27. ProcessIVYZ8I9JRequest (第1613行)
|
||||
28. ProcessJRZQ7F1ARequest (第1636行)
|
||||
29. ProcessIVYZ3P9MRequest (第1659行)
|
||||
30. ProcessJRZQ6F2ARequest (第1680行)
|
||||
|
||||
每个方法需要做的修改:
|
||||
|
||||
**修改前:**
|
||||
```go
|
||||
func (a *ApiRequestService) ProcessMethodName(params []byte) ([]byte, error) {
|
||||
// 方法体
|
||||
}
|
||||
```
|
||||
|
||||
**修改后:**
|
||||
```go
|
||||
func (a *ApiRequestService) ProcessMethodName(ctx context.Context, params []byte) ([]byte, error) {
|
||||
// 方法体
|
||||
}
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **不需要在每个方法中添加 `ctx := context.Background()`**
|
||||
- 因为现在通过参数传入
|
||||
- 使用 `ctx context.Context` 参数即可
|
||||
|
||||
2. **`callTianyuanApiWithLog` 方法已经支持传入 ctx**
|
||||
- 如果第一个参数为空字符串 `""`,会自动从缓存获取featureID
|
||||
- 否则使用传入的featureID
|
||||
|
||||
3. **不需要修改方法内部的 API 调用**
|
||||
- 因为我们已经修改了部分方法使用 `callTianyuanApiWithLog`
|
||||
- 批量替换后,记得将所有 `a.tianyuanapi.CallInterface` 替换为 `a.callTianyuanApiWithLog(ctx, "",`
|
||||
|
||||
## 完成后验证
|
||||
|
||||
1. **编译项目**
|
||||
```bash
|
||||
cd ycc-proxy-server
|
||||
go build ./...
|
||||
```
|
||||
|
||||
2. **检查编译错误**
|
||||
- 主要是方法签名不匹配的错误
|
||||
- 如果有错误,检查哪些方法没有正确修改
|
||||
|
||||
3. **运行测试**
|
||||
- 发起几个API请求
|
||||
- 检查 `tianyuanapi_call_log` 表
|
||||
- 验证日志是否正确记录
|
||||
|
||||
## 优势总结
|
||||
|
||||
使用 `ctx` 参数的方式:
|
||||
|
||||
✅ **代码更简洁** - 不需要重复创建context
|
||||
✅ **更好的控制** - 可以统一管理超时、取消
|
||||
✅ **符合最佳实践** - Context应该从上层传入
|
||||
✅ **便于追踪** - 可以在ctx中传递追踪信息
|
||||
✅ **便于测试** - 测试时可以传入自定义的ctx
|
||||
|
||||
Reference in New Issue
Block a user