feat: add generic file conversion sdk example
This commit is contained in:
@@ -49,6 +49,14 @@
|
||||
- 异常:凭据失效、权限不足、内容冲突、版本竞争和未知网络结果,见 [任务接口](../api/tasks.md)。
|
||||
- 清理:示例以取消结束;任务和审计历史保留。重复运行会生成独立示例任务。
|
||||
|
||||
## 已可运行:文件格式转换执行
|
||||
|
||||
- 源码:[CSV→JSON Worker 示例](../../sdk/go/examples/file-conversion/main.go),[完整说明](file-conversion.md)。
|
||||
- 前置:专用 Worker 凭据、已启动服务和当前迁移;标准隔离回归会自动运行本例。
|
||||
- 输入与步骤:提交带稳定操作键的两行 CSV 快照 → Worker 注册 `file.convert.csv-json` v1 → 领取、授权并转换 → 查询 JSON 结果 → 排空。
|
||||
- 预期:`SUCCEEDED`、一次尝试、`records.json`、`rows=2`,重复提交仍沿用原任务身份。
|
||||
- 边界:示例只把小文件正文放入任务快照;生产大文件应使用受控对象引用,业务侧仍需保存操作键并按外部效果核查规则处理未知结果。
|
||||
|
||||
## 已可运行:文本规范化执行
|
||||
|
||||
- 源码:[Worker 底层协议示例](../../sdk/go/examples/worker-protocol/main.go)。
|
||||
@@ -128,7 +136,7 @@
|
||||
|
||||
| 场景 | 输入与步骤 | 预期结果 | 必测异常 | 状态 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 文件转换 | 对象引用 → 提交任务 → Worker 转换 → 结果引用 | 同一操作获得一次业务结果,历史可查 | 重复提交、Worker 在结果上报前中断 | 受理与执行框架已实现,实际转换示例待补齐 |
|
||||
| 文件转换 | 小型 CSV 快照 → 提交任务 → Worker 转为 JSON → 查询结果 | 同一操作获得一次转换结果,历史可查 | 重复提交、Worker 在结果上报前中断 | CSV→JSON 通用示例已完成;大文件对象引用与外部效果仍由接入方实现 |
|
||||
| 定期同步 | 发布计划 → 周期触发 → 暂停 → 恢复 | 触发身份唯一,漏跑策略可追溯 | 多节点竞争、停机后补跑上限 | P3 通用快照示例已完成,业务同步由接入方处理器实现 |
|
||||
| 并行生成 | 输入对象 → 并行计算两份结果 → 汇合 | 两支满足条件后只创建一份后继工作 | 一支失败、重复结果、汇合竞争 | P4 待开发 |
|
||||
| 等待审核 | 校验 → 等待信号 → 发布结果 | 只接受授权、匹配当前操作的信号 | 早到、重复、过期与越权信号 | P4 待开发 |
|
||||
|
||||
57
docs/examples/file-conversion.md
Normal file
57
docs/examples/file-conversion.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# 文件格式转换示例
|
||||
|
||||
本例使用独立 Go SDK 提交一份小型 CSV 文件快照,由真实 Worker 转换成 JSON 文件正文,再查询平台权威结果。它只演示通用的任务受理、处理器版本、执行授权和结果确认,不包含行业规则或接入方项目名称。
|
||||
|
||||
## 前置
|
||||
|
||||
需要当前迁移、已启动 Orbit 服务,以及具备任务提交/读取和 Worker 消费权限的专用凭据。凭据文件应只保存在本地受保护目录:
|
||||
|
||||
```sh
|
||||
cd sdk/go
|
||||
ORBIT_URL=http://127.0.0.1:8080 \
|
||||
ORBIT_CREDENTIALS_FILE=../../.local/worker.credentials.json \
|
||||
go run ./examples/file-conversion
|
||||
```
|
||||
|
||||
## 调用链与预期
|
||||
|
||||
示例生成独立的运行身份和处理器能力,提交以下输入:
|
||||
|
||||
```json
|
||||
{
|
||||
"file_name": "records.csv",
|
||||
"content": "name,amount\nalpha,2\nbeta,3\n",
|
||||
"target_format": "json"
|
||||
}
|
||||
```
|
||||
|
||||
Worker 使用固定的 `file.convert.csv-json` 处理器版本完成转换。预期输出类似:
|
||||
|
||||
```text
|
||||
input=records.csv output=records.json rows=2 state=SUCCEEDED worker_drained=true
|
||||
```
|
||||
|
||||
任务结果中的 `content` 是:
|
||||
|
||||
```json
|
||||
[{"amount":"2","name":"alpha"},{"amount":"3","name":"beta"}]
|
||||
```
|
||||
|
||||
提交键由本次运行身份和场景组成;网络结果不明时必须复用相同提交键查询,不能生成随机新键。示例只执行一次处理器,Worker 结束前等待排空,任务和审计历史保留。
|
||||
|
||||
## 生产接入边界
|
||||
|
||||
示例将小文件正文放在任务 JSON 中,方便隔离运行和回归。生产大文件应由业务侧先保存到受控对象存储,再把不可变对象引用、格式和业务操作键放入任务;处理器需要使用上下文取消、对象版本和业务幂等键,不能把 `AttemptID` 当作跨尝试的业务幂等键。
|
||||
|
||||
如果处理器在外部写入后失去连接,普通错误只能报告未知效果,接入方应使用查询或证据核对;不能因为 HTTP 或 Worker 回执超时就再次生成文件。平台保存的是任务结果快照,不替代业务对象存储、病毒扫描、权限策略或归档策略。
|
||||
|
||||
## 回归
|
||||
|
||||
单元转换校验:
|
||||
|
||||
```sh
|
||||
cd sdk/go
|
||||
GOWORK=off go test ./examples/file-conversion
|
||||
```
|
||||
|
||||
`make integration` 会在一次性 MySQL 和真实 Orbit HTTP 服务上运行该示例,确认提交、Worker 执行、结果查询和排空均通过。该场景不证明外部对象存储的持久性,也不替代生产容量、故障切换或 RPO/RTO 验收。
|
||||
Reference in New Issue
Block a user