// Package nats 是网关对共享 bus 的薄封装(发布任务 / 订阅 Token 回流)。 package nats import ( "context" "log" sharedbus "github.com/sundynix/sundynix-shared/bus" "github.com/sundynix/sundynix-shared/contract" ) // Bus 包装共享 bus,向网关其余代码暴露发布能力。 type Bus struct { inner *sharedbus.Bus } // MustConnect 接入 NATS 并确保任务流存在。 func MustConnect(url string) *Bus { inner, err := sharedbus.Connect(url) if err != nil { log.Fatalf("[nats] connect: %v", err) } if err := inner.EnsureTaskStream(context.Background()); err != nil { log.Fatalf("[nats] ensure stream: %v", err) } log.Printf("[nats] connected %s, task stream ready", url) return &Bus{inner: inner} } // PublishTask 把组装后的 Task 发布到 sundynix.tasks.。 func (b *Bus) PublishTask(ctx context.Context, t *contract.Task) error { seq, err := b.inner.PublishTask(ctx, t) if err != nil { return err } log.Printf("[nats] published task %s (seq=%d)", t.ID, seq) return nil } // SubscribeTokens 订阅 sundynix.streams. 的 Token 回流, // 每个 Token 触发 onToken,流结束触发 onDone,返回 unsub。 func (b *Bus) SubscribeTokens(taskID string, onToken func([]byte), onDone func()) (func() error, error) { return b.inner.SubscribeTokens(taskID, onToken, onDone) } func (b *Bus) Close() { b.inner.Close() }