2026-09-07 15:11:33 +08:00
|
|
|
|
package com.gzzn.omms.msgexchange.domain
|
2026-09-06 16:13:50 +08:00
|
|
|
|
|
2026-09-09 22:17:04 +08:00
|
|
|
|
/** MSG_EVENT 事件形态(design.md §2.1:UPSERT 整态/通知,TOMBSTONE 删除)。 */
|
2026-09-09 17:53:08 +08:00
|
|
|
|
enum class EventType { UPSERT, TOMBSTONE }
|
2026-09-06 16:13:50 +08:00
|
|
|
|
|
2026-09-09 22:17:04 +08:00
|
|
|
|
/** MSG_EVENT 投递状态机(design.md §2.3:PENDING → SENT;失败退避重试;耗尽转 DEAD 保留作 DLQ)。 */
|
2026-09-06 16:13:50 +08:00
|
|
|
|
enum class EventStatus { PENDING, SENT, DEAD }
|
|
|
|
|
|
|
2026-09-09 17:53:08 +08:00
|
|
|
|
/**
|
2026-09-09 22:17:04 +08:00
|
|
|
|
* MSG_EVENT(outbox,design.md §2.1):状态、变更、删除通知。
|
|
|
|
|
|
* KAFKA_SCHD 发整态、KAFKA_MSG 只通知变化(docs/flight-state.md §5,两主题不承诺顺序);
|
|
|
|
|
|
* TOMBSTONE 仅在 ACTIVE→DELETED(§3.3)或生命周期清理前补发(§6),与删除同事务登记。
|
|
|
|
|
|
* stateVersion:发布时的航班版本;KAFKA_SCHD 聚合按 FLID 取最新(§5)。
|
2026-09-09 17:53:08 +08:00
|
|
|
|
*/
|
2026-09-06 16:13:50 +08:00
|
|
|
|
data class MsgEvent(
|
|
|
|
|
|
val eventId: Long? = null,
|
|
|
|
|
|
val target: String,
|
2026-09-09 17:53:08 +08:00
|
|
|
|
val partitionKey: String, // 恒为 FLID
|
|
|
|
|
|
val eventType: EventType = EventType.UPSERT,
|
2026-09-09 22:17:04 +08:00
|
|
|
|
val stateVersion: Long = 0,
|
2026-09-06 16:13:50 +08:00
|
|
|
|
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 = java.time.Instant.now(),
|
|
|
|
|
|
)
|