feat: add durable business inbox example and consumer crash recovery

This commit is contained in:
2026-09-17 20:49:51 +08:00
parent b17d9b1977
commit a8a8dcfe1e
27 changed files with 1601 additions and 17 deletions

View File

@@ -0,0 +1,28 @@
package inbox
import "time"
// Record 对应receiver_inbox,与业务视图同事务提交;存在记录才表示该事件处理已提交。
type Record struct {
ConsumerName string // ConsumerName 固定用途名;进程重启及多实例必须复用。
QueueID string // QueueID 固定来源队列,不能从连接会话推导。
EventID string // EventID 稳定事件身份,不使用交付ID或代次。
EventDigest []byte // EventDigest 32字节SHA256,防止同事件身份被换成不同内容。
EventJSON []byte // EventJSON 规范化冻结事件,含业务数据、不含租约秘密。
Applied bool // Applied 该事件是否推进业务视图;旧版本为false但仍可靠保存。
ReceivedAt time.Time // ReceivedAt 数据库UTC受理时间,微秒精度。
}
// TaskView 对应receiver_task_views;这是接收方业务数据,不是Orbit任务权威状态。
type TaskView struct {
ConsumerName string // ConsumerName 与Inbox相同的固定用途。
QueueID string // QueueID 与Inbox相同的绑定队列。
TaskID string // TaskID 原任务标识,业务视图主键的一部分。
LastRevision uint64 // LastRevision 已应用的最大任务版本;0只允许在未提交事务的占位行中。
LastEventID *string // LastEventID 最后推进视图的事件;仅占位状态可为空。
LastState string // LastState 冻结结果状态;NEEDS_REVIEW不能作为成功或最终失败。
ResultJSON []byte // ResultJSON 当前结果,nil表示来源未提供;数值保持精确。
AppliedEvents uint64 // AppliedEvents 实际推进次数,重复及迟到旧版本不增加。
CreatedAt time.Time // CreatedAt 视图首次创建的UTC时间,微秒精度。
UpdatedAt time.Time // UpdatedAt 最后推进的UTC时间,微秒精度。
}