Version: 0.6.1.dev.260316
♻️ refactor(outbox): 抽离通用事件总线,并完成 event_type-only 收口 - ✨ 新增 `infra` 层通用 `EventBus` / `EventContract`,统一事件发布与消费协议 - 🔄 将聊天持久化链路调整为通过 `service/events` 注册 handler 并发布事件,进一步解耦业务逻辑与异步处理流程 - 🧹 移除 `chat_history_async` 旧适配实现,以及基于 `biz_type` 的兼容分发逻辑 - 📝 更新 Outbox 异步持久化决策记录,明确保留方案 A,并正式启用方案 B - 📚 同步更新 README 中关于 Outbox + Kafka 可靠异步链路的说明 - 🚚 当前 `outbox + kafka` 已与项目业务链路完全解耦,沉淀为通用、可靠性更强的消息队列能力;后续将参考消息队列的典型使用方式,逐步扩展到更多业务场景 - ✨ 补充跨不同分类事务管理器中的 `agent dao` 注册与接入支持
This commit is contained in:
@@ -2,13 +2,25 @@ package kafka
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
// Envelope 是 outbox 投递到 Kafka 的统一包裹结构。
|
||||
// 设计目的:
|
||||
// 1) 消费端先拿到 outbox_id,可直接回写状态;
|
||||
// 2) biz_type 做分发,支持后续扩展更多异步业务;
|
||||
// 3) payload 保持原始 JSON,按业务类型再反序列化。
|
||||
// Envelope 是 outbox 投递到 Kafka 的统一协议包。
|
||||
//
|
||||
// 协议边界:
|
||||
// 1. 这是总线协议,不包含具体业务字段;
|
||||
// 2. 路由只依赖 event_type,不再保留 biz_type 兼容字段;
|
||||
// 3. payload 为原始业务 JSON,由业务 handler 决定如何反序列化。
|
||||
type Envelope struct {
|
||||
OutboxID int64 `json:"outbox_id"`
|
||||
BizType string `json:"biz_type"`
|
||||
Payload json.RawMessage `json:"payload"`
|
||||
// OutboxID 是 outbox 状态机主键,用于消费者回写 consumed/retry/dead。
|
||||
OutboxID int64 `json:"outbox_id"`
|
||||
// EventID 是事件唯一标识(当前默认回退为 outbox_id 字符串)。
|
||||
EventID string `json:"event_id,omitempty"`
|
||||
|
||||
// EventType 是唯一路由键(例如 chat.history.persist.requested)。
|
||||
EventType string `json:"event_type"`
|
||||
// EventVersion 是事件版本号(默认 v1)。
|
||||
EventVersion string `json:"event_version,omitempty"`
|
||||
// AggregateID 是聚合主键(例如 conversation_id),用于追踪同一业务对象事件流。
|
||||
AggregateID string `json:"aggregate_id,omitempty"`
|
||||
|
||||
// Payload 是业务载荷 JSON。
|
||||
Payload json.RawMessage `json:"payload"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user