package com.gzzn.omms.msgexchange.domain /** 事件的两种形态:UPSERT 是新增或更新(可能是整态也可能是变化通知),TOMBSTONE 是删除。 */ enum class EventType { UPSERT, TOMBSTONE } /** 投递状态:PENDING 待发 → SENT 已发出;发送失败按退避重试,重试次数用尽转 DEAD,留在表里当死信队列。 */ enum class EventStatus { PENDING, SENT, DEAD } /** * MSG_EVENT:一张待发事件表(outbox),记录航班状态变更要对外发什么。 * * 写业务数据时在同一个事务里往这里插一行,投递线程随后按行发出,这样业务提交和"该发的事件" * 不会脱节。KAFKA_SCHD 发完整状态,KAFKA_MSG 只发"这个航班变了"的通知;两个主题之间不保证 * 先后顺序。TOMBSTONE 只在两种情况下登记:航班从在用变成删除,或者被生命周期清理前补发 * 一次删除通知。见 docs/flight-state.md §5。 * * stateVersion 是发布时的航班版本号;同一 FLID 攒了多条待发事件时,只发版本号最新的那条。 */ data class MsgEvent( val eventId: Long? = null, val target: String, val partitionKey: String, // 分区键,恒为 FLID(航班实例 ID) val eventType: EventType = EventType.UPSERT, val stateVersion: Long = 0, val payloadJson: String, val state: EventStatus = EventStatus.PENDING, val attempts: Int = 0, val nextAttemptAt: java.time.Instant? = null, val errorClass: ErrorClass? = null, val lastError: String? = null, val createdAt: java.time.Instant, )