feat: add reusable MySQL outbox and HTTP lifecycle example
This commit is contained in:
23
adapters/outbox/mysql/model.go
Normal file
23
adapters/outbox/mysql/model.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package outbox
|
||||
|
||||
import "time"
|
||||
|
||||
// Record 是业务数据库中的待发命令;只确认平台受理,不能表示业务执行成功。
|
||||
type Record struct {
|
||||
NamespaceID string // NamespaceID 固定目标命名空间,换凭据不能改变归属。
|
||||
QueueID string // QueueID 固定目标队列,发送前通过当前凭据核对归属。
|
||||
OperationID string // OperationID 调用方持久化的业务操作ID,同命名空间内唯一。
|
||||
IdempotencyKey string // IdempotencyKey 由操作ID派生的固定提交键,重报禁止换键。
|
||||
RequestJSON []byte // RequestJSON 冻结的任务提交正文,保留数字精度,不含凭据。
|
||||
RequestDigest []byte // RequestDigest 冻结正文的SHA256,发送前重新校验,非平台语义摘要。
|
||||
State string // State PENDING待发、SENDING领取中、ACCEPTED已受理、REVIEW需核查。
|
||||
SendCount uint32 // SendCount 持久化领取次数,包含领取后未发HTTP即退出的次数,上限100。
|
||||
LeaseEpoch uint64 // LeaseEpoch 每次领取递增;旧代次不能更新新代次的本地结果。
|
||||
WakeAt *time.Time // WakeAt PENDING的下次领取时间或SENDING的租约期限;终结状态为空,UTC微秒。
|
||||
SendDeadlineAt time.Time // SendDeadlineAt 首次入库后24小时停止新发送,短于平台90天幂等窗口。
|
||||
LastCode string // LastCode 最近一次稳定分类,不保存HTTP错误正文、凭据或业务秘密。
|
||||
TaskID *string // TaskID 仅ACCEPTED记录平台任务ID,其余状态为空。
|
||||
ReceiptJSON []byte // ReceiptJSON 仅ACCEPTED保存原受理回执;不是当前执行状态。
|
||||
CreatedAt time.Time // CreatedAt 业务事务首次提交命令的UTC时间,微秒精度。
|
||||
UpdatedAt time.Time // UpdatedAt 最近状态变化的UTC时间,不能替代租约代次。
|
||||
}
|
||||
Reference in New Issue
Block a user