🔧 Add nil logger handling in NewConsumerManager and NewStreamManager; update integration test to pass config
This commit is contained in:
@@ -19,6 +19,9 @@ type ConsumerManager struct {
|
||||
|
||||
// NewConsumerManager creates a new consumer manager
|
||||
func NewConsumerManager(js nats.JetStreamContext, streamName, consumerName, subject string, logger *zap.Logger) *ConsumerManager {
|
||||
if logger == nil {
|
||||
logger = zap.NewNop()
|
||||
}
|
||||
return &ConsumerManager{
|
||||
js: js,
|
||||
streamName: streamName,
|
||||
@@ -66,5 +69,32 @@ func (cm *ConsumerManager) CreatePullSubscription() (*nats.Subscription, error)
|
||||
|
||||
// CreatePullSubscriptionWithRecovery creates a pull subscription
|
||||
func (cm *ConsumerManager) CreatePullSubscriptionWithRecovery(streamManager *StreamManager, consumerConfig *nats.ConsumerConfig) (*nats.Subscription, error) {
|
||||
return cm.CreatePullSubscription()
|
||||
sub, err := cm.CreatePullSubscription()
|
||||
if err == nil {
|
||||
return sub, nil
|
||||
}
|
||||
|
||||
// Attempt recovery when the consumer or stream is missing.
|
||||
if !errors.Is(err, nats.ErrConsumerNotFound) && !errors.Is(err, nats.ErrStreamNotFound) {
|
||||
return nil, fmt.Errorf("create pull subscription: %w", err)
|
||||
}
|
||||
|
||||
if streamManager != nil {
|
||||
if streamErr := streamManager.EnsureStream(nil); streamErr != nil {
|
||||
return nil, fmt.Errorf("recover stream %s: %w", cm.streamName, streamErr)
|
||||
}
|
||||
}
|
||||
|
||||
if consumerConfig == nil {
|
||||
return nil, fmt.Errorf("consumer config is required for recovery")
|
||||
}
|
||||
if err := cm.EnsureConsumer(consumerConfig); err != nil {
|
||||
return nil, fmt.Errorf("recover consumer %s: %w", cm.consumerName, err)
|
||||
}
|
||||
|
||||
sub, err = cm.CreatePullSubscription()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create pull subscription after recovery: %w", err)
|
||||
}
|
||||
return sub, nil
|
||||
}
|
||||
|
||||
@@ -29,6 +29,9 @@ type StreamConfig struct {
|
||||
|
||||
// NewStreamManager creates a new stream manager
|
||||
func NewStreamManager(js nats.JetStreamContext, streamName string, subjects []string, logger *zap.Logger) *StreamManager {
|
||||
if logger == nil {
|
||||
logger = zap.NewNop()
|
||||
}
|
||||
return &StreamManager{
|
||||
js: js,
|
||||
streamName: streamName,
|
||||
|
||||
@@ -82,7 +82,7 @@ func TestJetStreamToTimescaleFlow(t *testing.T) {
|
||||
}
|
||||
|
||||
telemetryRecorder := telemetryinfra.NewNoop()
|
||||
proc := app.NewMessageProcessor(parser.ProvideParser(), repo, publisher, telemetryRecorder, logger)
|
||||
proc := app.NewMessageProcessor(parser.ProvideParser(), repo, publisher, telemetryRecorder, logger, cfg)
|
||||
consumer, err := natsinfra.ProvideConsumer(conn, js, proc, cfg, telemetryRecorder, logger)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to init consumer: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user