nats_wave 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,53 +4,110 @@ begin
4
4
  Rails.logger.info "Initializing NATS Wave with URL: #{ENV['NATS_URL']}"
5
5
 
6
6
  NatsWave.configure do |config|
7
+ # === CORE CONNECTION SETTINGS ===
7
8
  config.nats_url = ENV.fetch('NATS_URL', 'nats://localhost:4222')
8
9
  config.service_name = ENV.fetch('NATS_SERVICE_NAME',
9
- Rails.application.class.name.deconstantize.underscore)
10
+ Rails.application.class.name.deconstantize.underscore)
10
11
  config.connection_pool_size = 10
11
12
  config.reconnect_attempts = 3
12
13
 
13
14
  Rails.logger.info "NATS URL: #{config.nats_url}"
14
15
  Rails.logger.info "Service Name: #{config.service_name}"
15
16
 
16
- # Publishing
17
- config.publishing_enabled = !Rails.env.test?
18
- config.async_publishing = Rails.env.production?
19
- config.default_subject_prefix = config.service_name
17
+ # === PUBLISHING CONFIGURATION ===
18
+ config.publishing_enabled = !Rails.env.test? # Disable in test environment
19
+ config.async_publishing = Rails.env.production? # Async only in production
20
+ config.default_subject_prefix = config.service_name # Use service name as prefix
20
21
 
21
- # Subscription
22
- config.subscription_enabled = !Rails.env.test?
23
- config.queue_group = "#{config.service_name}_consumers"
22
+ # === SUBSCRIPTION CONFIGURATION ===
23
+ config.subscription_enabled = !Rails.env.test? # Disable in test environment
24
+ config.queue_group = "#{config.service_name}_consumers" # Queue group for load balancing
24
25
 
25
- # Error Handling
26
- config.max_retries = 3
27
- config.retry_delay = 5
28
- config.dead_letter_queue = "failed_messages"
26
+ # === ERROR HANDLING ===
27
+ config.max_retries = 3 # Max retry attempts
28
+ config.retry_delay = 5 # Base retry delay in seconds
29
+ config.dead_letter_queue = "failed_messages" # Failed message storage
29
30
 
30
- # Authentication (optional)
31
- # config.middleware_authentication_enabled = true
32
- # config.auth_secret_key = ENV['NATS_AUTH_SECRET']
31
+ # === AUTHENTICATION (Optional) ===
32
+ if ENV['NATS_AUTH_SECRET'].present?
33
+ config.middleware_authentication_enabled = true
34
+ config.auth_secret_key = ENV['NATS_AUTH_SECRET']
35
+ end
36
+
37
+ # === VALIDATION (Optional) ===
38
+ if ENV['SCHEMA_REGISTRY_URL'].present?
39
+ config.middleware_validation_enabled = true
40
+ config.schema_registry_url = ENV['SCHEMA_REGISTRY_URL']
41
+ end
33
42
 
34
- # Validation (optional)
35
- # config.middleware_validation_enabled = true
36
- # config.schema_registry_url = ENV['SCHEMA_REGISTRY_URL']
43
+ # === LOGGING ===
44
+ config.middleware_logging_enabled = true
45
+ config.log_level = Rails.env.production? ? 'info' : 'debug'
37
46
  end
38
47
 
39
48
  Rails.logger.info "NATS Wave configuration completed successfully"
40
49
  rescue => e
41
50
  Rails.logger.error "Failed to configure NATS Wave: #{e.message}"
42
51
  Rails.logger.error e.backtrace.join("\n")
52
+
53
+ # Optional: Re-raise in development to catch configuration issues early
54
+ raise e if Rails.env.development?
43
55
  end
44
56
 
57
+ # === AUTOMATIC SUBSCRIBER STARTUP ===
45
58
  Rails.application.config.after_initialize do
46
59
  Thread.new do
47
- sleep 2 # Give Rails time to boot
60
+ sleep 2 # Give Rails time to boot and load all models
48
61
  begin
62
+ # Start subscriber - this will automatically process all registered model subscriptions
49
63
  NatsWave.start_subscriber
50
64
  Rails.logger.info "✅ NatsWave subscriber started successfully"
65
+
66
+ # Optional: Log subscription statistics
67
+ stats = NatsWave::ModelRegistry.subscription_stats
68
+ Rails.logger.info "📊 Active subscriptions: #{stats[:total_subscriptions]} across #{stats[:models_with_subscriptions]} models"
69
+
51
70
  rescue StandardError => e
52
71
  Rails.logger.error "Failed to start NatsWave subscriber: #{e.message}"
53
72
  Rails.logger.error e.backtrace.join("\n")
73
+
74
+ # Optional: Alert monitoring systems
75
+ if defined?(Sentry)
76
+ Sentry.capture_exception(e, tags: { component: 'nats_wave_startup' })
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ # === DATADOG METRICS INTEGRATION (Optional) ===
83
+ if defined?(Datadog::Statsd) && !Rails.env.test?
84
+ # Get application version safely
85
+ app_version = begin
86
+ Rails.application.config.version
87
+ rescue
88
+ 'unknown'
89
+ end
90
+
91
+ NatsWave::Metrics.configure_datadog(
92
+ namespace: "#{Rails.application.class.name.deconstantize.underscore}.nats_wave",
93
+ tags: {
94
+ service: NatsWave.configuration.service_name,
95
+ environment: Rails.env,
96
+ version: app_version
97
+ }
98
+ )
99
+ Rails.logger.info "📈 Datadog metrics integration enabled"
100
+ end
101
+
102
+ # === GRACEFUL SHUTDOWN (Optional) ===
103
+ at_exit do
104
+ begin
105
+ if defined?(NatsWave) && NatsWave.client
106
+ Rails.logger.info "🛑 Shutting down NatsWave connections..."
107
+ NatsWave.client.disconnect!
108
+ Rails.logger.info "✅ NatsWave shutdown complete"
54
109
  end
110
+ rescue => e
111
+ Rails.logger.error "Error during NatsWave shutdown: #{e.message}"
55
112
  end
56
113
  end
@@ -77,7 +77,7 @@ module NatsWave
77
77
  {
78
78
  service: @service_name,
79
79
  environment: ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'unknown',
80
- version: ENV['APP_VERSION'] || '1.1.5'
80
+ version: ENV['APP_VERSION'] || '1.1.7'
81
81
  }
82
82
  end
83
83