在现有 HTTP 服务中使用 Orbit
可运行的 Go 服务:HTTP 业务事务 → 公共 MySQL Outbox → Orbit → 内嵌 Worker → WebSocket 结果 → 业务 Inbox。
- 完整准备、运行、API、故障与退出说明
- 业务路由与组件装配
- 生命周期顺序
- 业务事务
- 业务 Inbox 示例实现,沿用独立 result-inbox 示例的事件去重与版本约束
init 创建业务库表;provision 用稳定身份创建结果订阅;serve 使用配置中的订阅 ID,启动时无需 Orbit 在线。默认只监听回环地址 127.0.0.1:8090。接入已有服务时挂载业务路由,并接入原有鉴权、监控及生命周期。
快速运行
先按上方完整手册创建专用 Orbit 队列/凭据(含 Worker 与事件权限)和一个独立空业务库。从仓库根目录执行,DSN 替换为自己的配置:
export ORBIT_URL=http://127.0.0.1:8080
export ORBIT_CREDENTIALS_FILE="$PWD/.local/http-demo.credentials.json"
export APP_MYSQL_DSN='user:password@tcp(127.0.0.1:3306)/orbit_http_demo'
export APP_HTTP_ADDR=127.0.0.1:8090
cd examples/http-service
export GOWORK=off
go run ./cmd/server init
export ORBIT_SUBSCRIPTION_ID="$(go run ./cmd/server provision)"
go build -o server ./cmd/server
./server serve
init 只在首次空库执行;持久保存 provision 的订阅 ID,重启只运行 serve。另开终端:
export OPERATION_ID="$(openssl rand -hex 16)"
curl --fail http://127.0.0.1:8090/jobs \
-H 'Content-Type: application/json' \
-d "{\"operation_id\":\"$OPERATION_ID\",\"source_ref\":\"objects/demo.txt\"}"
curl --fail "http://127.0.0.1:8090/jobs/$OPERATION_ID"
预期首次返回 local_committed=true;稍后 GET 显示 submission=ACCEPTED、execution=SUCCEEDED,结果包含 normalized_ref=OBJECTS/DEMO.TXT。同 ID、同内容重报返回 duplicate=true;相同 ID 改内容返回 409。超时后保留原 ID,不重新生成。
通过 Ctrl-C/SIGTERM 关闭时先停止接收 HTTP,再收尾发送器/Worker,之后停止结果消费,最后关闭数据库。完整错误码、故障恢复和部署关闭期限见运行手册。