Files
smartmate/backend/infra/kafka/envelope.go
Losita 626fc700d2 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` 注册与接入支持
2026-03-16 13:00:26 +08:00

27 lines
1.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package kafka
import "encoding/json"
// Envelope 是 outbox 投递到 Kafka 的统一协议包。
//
// 协议边界:
// 1. 这是总线协议,不包含具体业务字段;
// 2. 路由只依赖 event_type不再保留 biz_type 兼容字段;
// 3. payload 为原始业务 JSON由业务 handler 决定如何反序列化。
type Envelope struct {
// 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"`
}