27 lines
1.9 KiB
Markdown
27 lines
1.9 KiB
Markdown
# 独立 MySQL Inbox 示例
|
||
|
||
这是接收方应用示例,使用正式 Orbit Go SDK 和自己的 MySQL 数据库。核心 SDK 不依赖数据库驱动;示例是独立 Go module,通过本地 replace 引用 SDK。
|
||
|
||
完整前置、调用、输出、故障处理与事务边界见 [运行手册](../../docs/examples/result-inbox.md)。
|
||
|
||
先按运行手册创建带 `--event-access` 的专用平台凭据及独立空业务库。从仓库根目录执行(DSN 替换为实际配置):
|
||
|
||
```sh
|
||
export ORBIT_URL=http://127.0.0.1:8080
|
||
export ORBIT_CREDENTIALS_FILE="$PWD/.local/inbox.credentials.json"
|
||
export ORBIT_RECEIVER_DSN='user:password@tcp(127.0.0.1:3306)/receiver_example'
|
||
cd examples/result-inbox
|
||
GOWORK=off go run ./cmd/receiver init
|
||
GOWORK=off go run ./cmd/receiver demo
|
||
```
|
||
|
||
- `init`:使用 ORBIT_RECEIVER_DSN 初始化专用空数据库,不自动升级已有表。
|
||
- `demo`:使用事件凭据和隔离队列产生结果,验证两次业务处理只推进一次,再确认并暂停本次订阅。
|
||
- `consume`:消费 ORBIT_SUBSCRIPTION_ID 指定的已有订阅,RECEIVER_NAME 在重启和多实例之间保持固定。
|
||
|
||
[业务事务](internal/inbox/store.go) 同时写入 [Inbox 与视图](internal/inbox/schema.sql),两张表、17个中文字段注释、零外键。模型见 [model.go](internal/inbox/model.go)。
|
||
|
||
根目录 `make test/vet/build` 包含本模块;`make integration` 创建独立临时数据库,运行数据库、COMMIT响应丢失、真实消费者强杀回归和demo,结束清理自建容器。未设置集成环境时普通go test跳过外部测试,不表示这些故障已经验证。
|
||
|
||
预期 demo 输出 `inbox_duplicate=true applied_events=1` 和 `ack_confirmed=1 pending=0`。`init` 仅运行一次;连续消费另行配置持久的 `ORBIT_SUBSCRIPTION_ID`、`RECEIVER_NAME`,再运行 `GOWORK=off go run ./cmd/receiver consume`。完整命令见运行手册;不要用重复运行 demo 替代持续消费。
|