# 业务事务 Outbox 示例 独立Go module,使用业务方自己的MySQL保存业务记录与待发请求,再通过独立Orbit SDK提交任务。平台与业务库分别提交,通过原幂等身份衔接恢复。 - [完整初始化、运行、恢复与接口说明](../../docs/examples/task-outbox.md) - [命令行程序](cmd/sender/main.go):init、enqueue、send、status、demo。 - [业务事务](internal/outbox/store.go)、[发送器](../../adapters/outbox/mysql/sender.go)、[中文模型](internal/outbox/model.go)与[无外键表结构](internal/outbox/schema.sql)。 本模块是可运行的业务接入参考。核心SDK不引入MySQL驱动;生产业务应将本地事务接入自身业务模型、权限、审计与迁移,固定SDK版本并验证兼容性。本例的internal包不作为已发布通用SDK包承诺兼容。 从本目录运行基础检查: ```sh GOWORK=off go test -race ./... GOWORK=off go vet ./... GOWORK=off go build ./cmd/sender ``` 真实数据库、HTTP、COMMIT响应丢失、CLI及发送进程故障由仓库根目录的`make integration`统一执行,使用专门的一次性数据库。没有测试环境变量时Integration会跳过。 发送核心已抽为[公共 MySQL 适配包](../../adapters/outbox/mysql/README.md);本项目仅保留示例业务事务。已有 sender_outbox / sender_jobs 表保持兼容。 ## 运行与核对 先按完整手册创建专用平台队列和独立空业务库;从仓库根目录设置配置: ```sh 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 `、`send`、`status `。操作 ID 是预先持久化的 32 位小写十六进制字符串;断线/重启后仍用原 ID 查询和恢复。ACCEPTED 仅表示平台受理,执行完成须另接 Worker 和结果订阅。