Refactor Kafka publishing without DB outbox
This commit is contained in:
@@ -38,6 +38,8 @@ const (
|
||||
adminCommandKafkaDeadResolve = "kafka.dead_letter.resolve"
|
||||
)
|
||||
|
||||
var publishKafkaDeadLetter = publishKafkaEnvelope
|
||||
|
||||
type adminCommandPayload struct {
|
||||
CommandID string `json:"command_id"`
|
||||
ActorUserID string `json:"actor_user_id"`
|
||||
@@ -482,6 +484,13 @@ func kafkaTenantID(tenantCode string) (types.TenantID, error) {
|
||||
return tenant.ID, nil
|
||||
}
|
||||
|
||||
func kafkaTenantIDFromEnvelope(envelope kafkaEnvelope) (types.TenantID, error) {
|
||||
if !envelope.TenantID.IsZero() {
|
||||
return envelope.TenantID, nil
|
||||
}
|
||||
return kafkaTenantID(envelope.TenantCode)
|
||||
}
|
||||
|
||||
func markKafkaDeadLetter(ctx context.Context, tenantID types.TenantID, envelope kafkaEnvelope, consume *types.KafkaConsumeRecord, reason, message string) error {
|
||||
encoded, err := json.Marshal(envelope)
|
||||
if err != nil {
|
||||
@@ -512,26 +521,15 @@ func markKafkaDeadLetter(ctx context.Context, tenantID types.TenantID, envelope
|
||||
Status: types.KafkaDeadStatusDead,
|
||||
}
|
||||
now := time.Now().UTC().Round(time.Millisecond)
|
||||
if err = store.HTTPInfrastructure.MarkKafkaConsumeDead(tenantID, dead, now); err != nil {
|
||||
return err
|
||||
}
|
||||
if auditErr := enqueueKafkaAuditEvent(ctx, tenantID, "system", types.ZeroUid, "kafka.dead_letter.created", "kafka_event", envelope.EventID, "dead", reason, map[string]any{
|
||||
"dead_id": deadID,
|
||||
"event_type": envelope.EventType,
|
||||
"biz_type": envelope.BizType,
|
||||
"biz_id": envelope.BizID,
|
||||
"consumer_group": kafkaBus.config.ConsumerGroup,
|
||||
}); auditErr != nil {
|
||||
logs.Warn.Printf("kafka dead letter audit enqueue failed: event=%s dead=%s err=%v", envelope.EventID, deadID, auditErr)
|
||||
}
|
||||
deadPayload, err := json.Marshal(dead)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return publishKafkaEnvelope(ctx, "dead_letter", envelope.EventID, kafkaEnvelope{
|
||||
return publishKafkaDeadLetter(ctx, "dead_letter", envelope.EventID, kafkaEnvelope{
|
||||
EventID: deadID,
|
||||
TraceID: envelope.TraceID,
|
||||
TenantCode: envelope.TenantCode,
|
||||
TenantID: tenantID,
|
||||
SourceService: "im-server",
|
||||
TargetService: "hotgo-admin",
|
||||
EventType: "kafka.dead_letter.created",
|
||||
|
||||
Reference in New Issue
Block a user