Files
orbit/examples/task-outbox/README.md

2.3 KiB
Raw Blame History

业务事务 Outbox 示例

独立Go module,使用业务方自己的MySQL保存业务记录与待发请求,再通过独立Orbit SDK提交任务。平台与业务库分别提交,通过原幂等身份衔接恢复。

本模块是可运行的业务接入参考。核心SDK不引入MySQL驱动;生产业务应将本地事务接入自身业务模型、权限、审计与迁移,固定SDK版本并验证兼容性。本例的internal包不作为已发布通用SDK包承诺兼容。

从本目录运行基础检查:

GOWORK=off go test -race ./...
GOWORK=off go vet ./...
GOWORK=off go build ./cmd/sender

真实数据库、HTTP、COMMIT响应丢失、CLI及发送进程故障由仓库根目录的make integration统一执行,使用专门的一次性数据库。没有测试环境变量时Integration会跳过。

发送核心已抽为公共 MySQL 适配包;本项目仅保留示例业务事务。已有 sender_outbox / sender_jobs 表保持兼容。

运行与核对

先按完整手册创建专用平台队列和独立空业务库;从仓库根目录设置配置:

export ORBIT_URL=http://127.0.0.1:8080
export ORBIT_CREDENTIALS_FILE="$PWD/.local/outbox.credentials.json"
export ORBIT_SENDER_DSN='user:password@tcp(127.0.0.1:3306)/sender_example'
cd examples/task-outbox
GOWORK=off go run ./cmd/sender init
GOWORK=off go run ./cmd/sender demo

init 只初始化一次。demo 写入本地业务事务、核对重复入队、发送并确认原任务身份,最后取消示例任务;预期受理状态为 ACCEPTED。请在没有 object.prepare Worker 的隔离队列运行此受理演示。

真实业务分开调用 enqueue <operation_id> <source_ref>、send、status <operation_id>。操作 ID 是预先持久化的 32 位小写十六进制字符串;断线/重启后仍用原 ID 查询和恢复。ACCEPTED 仅表示平台受理,执行完成须另接 Worker 和结果订阅。