feat(go): publish realtime fields stream

This commit is contained in:
lingniu
2026-07-03 14:08:32 +08:00
parent e1bf2d72e1
commit 535acdb2a6
23 changed files with 284 additions and 15 deletions

View File

@@ -79,6 +79,16 @@ func (s *DurableSink) PublishUnified(ctx context.Context, env envelope.FrameEnve
return s.spool("unified", env)
}
func (s *DurableSink) PublishFields(ctx context.Context, env envelope.FrameEnvelope) error {
if s.isRawPending(env) {
return s.spool("fields", env)
}
if err := s.delegate.PublishFields(ctx, env); err == nil {
return nil
}
return s.spool("fields", env)
}
func (s *DurableSink) ReplayOnce(ctx context.Context) error {
return s.replay(ctx, 0)
}
@@ -147,7 +157,10 @@ func durableKindOrder(kind string) int {
if kind == "unified" {
return 1
}
return 2
if kind == "fields" {
return 2
}
return 3
}
func (s *DurableSink) ReplayLoop(ctx context.Context, interval time.Duration, onError func(error)) {
@@ -184,6 +197,8 @@ func (s *DurableSink) publishRecord(ctx context.Context, record durableRecord) e
return s.delegate.PublishRaw(ctx, record.Envelope)
case "unified":
return s.delegate.PublishUnified(ctx, record.Envelope)
case "fields":
return s.delegate.PublishFields(ctx, record.Envelope)
default:
return errUnknownRecordKind(record.Kind)
}