Files
orbit/docs/examples/event-protocol.md

31 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 结果消费协议示例
[完整代码](../../sdk/go/examples/event-protocol/main.go) 使用正式 Go SDK 创建取消结果订阅,提交并取消一个待执行任务,接收并验证冻结结果,然后 ACK;关闭连接后在新连接中重报原证明,验证原确认时间和去重回执,最后暂停本次订阅。
本例只读取并验证结果,没有业务数据库写入。生产业务应使用 [自动消费器及事务去重约定](../sdk/event-consumer.md)。持久化 Inbox 完整示例尚待交付。
## 启动
先按 [订阅管理示例](subscriptions.md) 建立隔离示例队列和带 --event-access 的凭据,启动 Orbit。凭据需要 tasks:submit、tasks:cancel、events:manage/read/consume 及该队列范围;订阅绑定创建凭据,不能临时换凭据消费。
从 sdk/go 目录运行:
```sh
ORBIT_URL=http://127.0.0.1:8080 \
ORBIT_CREDENTIALS_FILE=../../.local/event.credentials.json \
go run ./examples/event-protocol
```
也可以传 ORBIT_TOKEN 与 ORBIT_QUEUE_ID,环境变量覆盖凭据文件对应值。每次运行新建随机订阅及任务身份,全部流程最多 15 秒。本例是短流程,两个连接均短于一次心跳周期;长期运行必须用自动消费器或主动 Ping。
## 输出与核对
```text
event=<本次事件ID> task=<本次任务ID> state=CANCELLED
ack_replayed=true same_receipt=true pending=0 subscription_enabled=false
```
该输出验证的是事件快照和平台 ACK 去重,不表示业务副作用获得恰好一次保证。任何请求失败、收到非本次任务的事件或确认时间不一致,都非零退出;保留已生成的状态供核查。
需要独立示例队列,避免其他程序同时产生取消结果。正常结束暂停本次订阅,保留任务、交付和审计;不删除历史。每个命名空间最多 64 个订阅,重复演示应使用独立测试环境。`make integration` 在一次性 MySQL 和真实进程上实际执行本例。