49 lines
2.8 KiB
Markdown
49 lines
2.8 KiB
Markdown
# 按业务关联分页查找流程
|
||
|
||
场景:一个对象关联多次处理流程,管理端需要按固定定义版本、精确业务关联及时间范围查询等待中的实例,再进入详情处理。示例同时证明业务键末尾有无空格属于不同关联。
|
||
|
||
源码:[workflow-query/main.go](../../sdk/go/examples/workflow-query/main.go)。服务端入口:[筛选接口](../api/workflow-queries.md)。示例发布一个SIGNAL等待流程,创建三个实例,其中两个使用相同业务键、第三个去掉尾部空格;每页1项读取匹配的两个实例,最后将三个实例取消并等待CANCELLED。
|
||
|
||
## 启动
|
||
|
||
需要已完成迁移的Orbit、MySQL 8.4+与Go 1.27.1。从仓库根目录使用专用开发数据库运行:
|
||
|
||
```sh
|
||
go run ./cmd/orbit-migrate up
|
||
mkdir -p .local
|
||
chmod 700 .local
|
||
go run ./cmd/orbit-admin bootstrap \
|
||
--application query-example --namespace default --environment development \
|
||
--queue work --workflow-access --workflow-run-access --workflow-control-access \
|
||
--output .local/workflow-query.credentials.json
|
||
go run ./cmd/orbit
|
||
```
|
||
|
||
另开终端:
|
||
|
||
```sh
|
||
cd sdk/go
|
||
ORBIT_URL=http://127.0.0.1:8080 \
|
||
ORBIT_CREDENTIALS_FILE=../../.local/workflow-query.credentials.json \
|
||
go run ./examples/workflow-query
|
||
```
|
||
|
||
查询本身只要求workflows:read。此完整示例额外需要研发创建/发布、启动与控制权限,由上述bootstrap选项授予。SIGNAL等待不用Worker,也不模拟外部业务成功;正常结束通过显式取消结清。
|
||
|
||
预期输出:
|
||
|
||
```text
|
||
workflow_query_verified=true matched=2 pages=2 exact_trailing_space=true
|
||
workflow_query_cleanup=CANCELLED count=3
|
||
```
|
||
|
||
每次独立运行生成新的操作身份与定义,单次运行内发布/启动/控制分别保留稳定操作身份。输入为JSON null,输出契约为外部回执布尔值,本例不提交回执。流程120秒总时限保持有限。
|
||
|
||
## 错误与清理
|
||
|
||
无授权、发布失败、筛选丢失、重复项、取消失败均非零退出。输出不含凭据。网络失败不自动创建新操作或换筛选;正式业务应先持久保存请求、定义ID和原操作键,再按[实例接口](../api/workflows.md)恢复回执。
|
||
|
||
正常结束保留定义、版本、已取消实例和审计。若中途退出,已有等待保留原绝对截止,不直接删除运行数据;查询当前实例,按最新control_revision发起有原因的取消,存在未知效果则进入核查流程。示例不会更改已有实例,也不清空数据库;连续运行会累积定义,达到每命名空间100个定义的上限应使用新的隔离演示命名空间,不删除生产历史规避限制。
|
||
|
||
`make integration`在一次性数据库中启动真实Orbit,验证SDK与本例,并清理该次容器。跨页不是快照,实际管理界面应允许刷新第一页,并保留后续页的全部查询条件。
|