2026-09-07 15:11:33 +08:00
|
|
|
|
package com.gzzn.omms.msgexchange.domain
|
2026-09-06 16:13:50 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* ACMA-8 MSG_EVENT(统一投递事件 / outbox)。
|
|
|
|
|
|
* TARGET 阶段化:KAFKA:msg、KAFKA:schd 自阶段 A;ES:flight_hts、REDIS:flightInfo 仅阶段 B 投影期。
|
|
|
|
|
|
*/
|
|
|
|
|
|
object Targets {
|
|
|
|
|
|
const val KAFKA_MSG = "KAFKA:msg"
|
|
|
|
|
|
const val KAFKA_SCHD = "KAFKA:schd"
|
|
|
|
|
|
const val ES_FLIGHT_HTS = "ES:flight_hts"
|
|
|
|
|
|
const val REDIS_FLIGHT_INFO = "REDIS:flightInfo"
|
|
|
|
|
|
|
|
|
|
|
|
/** 阶段 A 投递目标(仅 Kafka)——I5:Delivery 阶段 A 不写 Redis。 */
|
|
|
|
|
|
val phaseA: List<String> = listOf(KAFKA_MSG, KAFKA_SCHD)
|
|
|
|
|
|
|
|
|
|
|
|
/** 阶段 B 追加投影目标。 */
|
|
|
|
|
|
val phaseB: List<String> = phaseA + listOf(ES_FLIGHT_HTS, REDIS_FLIGHT_INFO)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
enum class EventStatus { PENDING, SENT, DEAD }
|
|
|
|
|
|
|
|
|
|
|
|
data class MsgEvent(
|
|
|
|
|
|
val eventId: Long? = null,
|
|
|
|
|
|
val target: String,
|
|
|
|
|
|
val partitionKey: String? = null, // schd 事件恒为 FLID(v4 显式声明)
|
|
|
|
|
|
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(),
|
|
|
|
|
|
)
|