feat: retry gateway kafka publishes

This commit is contained in:
lingniu
2026-07-01 22:54:47 +08:00
parent e7c8c57296
commit 7e7066dd86
4 changed files with 178 additions and 2 deletions

View File

@@ -138,7 +138,7 @@ func buildSink(logger *slog.Logger) (eventbus.Sink, error) {
logger.Warn("KAFKA_BROKERS is empty; using log sink")
return eventbus.NewLogSink(logger), nil
}
return eventbus.NewKafkaSink(eventbus.KafkaConfig{
sink, err := eventbus.NewKafkaSink(eventbus.KafkaConfig{
Brokers: brokers,
RawTopics: map[envelope.Protocol]string{
envelope.ProtocolGB32960: env("KAFKA_TOPIC_GB32960_RAW", "vehicle.raw.gb32960.v1"),
@@ -147,6 +147,14 @@ func buildSink(logger *slog.Logger) (eventbus.Sink, error) {
},
UnifiedTopic: env("KAFKA_TOPIC_UNIFIED", "vehicle.event.unified.v1"),
})
if err != nil {
return nil, err
}
return eventbus.NewRetryingSink(sink, eventbus.RetryConfig{
Attempts: envInt("KAFKA_PUBLISH_ATTEMPTS", 3),
Backoff: time.Duration(envInt("KAFKA_PUBLISH_BACKOFF_MS", 100)) * time.Millisecond,
AttemptTimeout: time.Duration(envInt("KAFKA_PUBLISH_TIMEOUT_MS", 3000)) * time.Millisecond,
}), nil
}
func env(key string, fallback string) string {