feat: add durable business inbox example and consumer crash recovery
This commit is contained in:
28
examples/result-inbox/internal/inbox/model.go
Normal file
28
examples/result-inbox/internal/inbox/model.go
Normal 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时间,微秒精度。
|
||||
}
|
||||
Reference in New Issue
Block a user