jetstream_bridge 4.4.1 → 4.5.0

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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +92 -337
  3. data/README.md +1 -5
  4. data/docs/GETTING_STARTED.md +11 -7
  5. data/docs/PRODUCTION.md +51 -11
  6. data/docs/TESTING.md +24 -35
  7. data/lib/generators/jetstream_bridge/health_check/health_check_generator.rb +1 -1
  8. data/lib/generators/jetstream_bridge/initializer/initializer_generator.rb +1 -1
  9. data/lib/generators/jetstream_bridge/initializer/templates/jetstream_bridge.rb +0 -4
  10. data/lib/generators/jetstream_bridge/install/install_generator.rb +5 -5
  11. data/lib/generators/jetstream_bridge/migrations/migrations_generator.rb +2 -2
  12. data/lib/jetstream_bridge/consumer/consumer.rb +34 -96
  13. data/lib/jetstream_bridge/consumer/health_monitor.rb +107 -0
  14. data/lib/jetstream_bridge/consumer/message_processor.rb +1 -1
  15. data/lib/jetstream_bridge/consumer/subscription_manager.rb +51 -34
  16. data/lib/jetstream_bridge/core/config.rb +153 -46
  17. data/lib/jetstream_bridge/core/connection_manager.rb +513 -0
  18. data/lib/jetstream_bridge/core/debug_helper.rb +9 -3
  19. data/lib/jetstream_bridge/core/health_checker.rb +184 -0
  20. data/lib/jetstream_bridge/core.rb +0 -2
  21. data/lib/jetstream_bridge/facade.rb +212 -0
  22. data/lib/jetstream_bridge/publisher/event_envelope_builder.rb +110 -0
  23. data/lib/jetstream_bridge/publisher/publisher.rb +87 -117
  24. data/lib/jetstream_bridge/rails/integration.rb +8 -5
  25. data/lib/jetstream_bridge/rails/railtie.rb +4 -3
  26. data/lib/jetstream_bridge/tasks/install.rake +0 -1
  27. data/lib/jetstream_bridge/topology/topology.rb +6 -1
  28. data/lib/jetstream_bridge/version.rb +1 -1
  29. data/lib/jetstream_bridge.rb +206 -297
  30. metadata +7 -5
  31. data/lib/jetstream_bridge/core/bridge_helpers.rb +0 -109
  32. data/lib/jetstream_bridge/core/connection.rb +0 -464
  33. data/lib/jetstream_bridge/core/connection_factory.rb +0 -100
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'connection'
4
- require_relative '../errors'
5
-
6
- module JetstreamBridge
7
- module Core
8
- # Factory for creating and managing NATS connections
9
- class ConnectionFactory
10
- # Connection options builder
11
- class ConnectionOptions
12
- DEFAULT_OPTS = {
13
- reconnect: true,
14
- reconnect_time_wait: 2,
15
- max_reconnect_attempts: 10,
16
- connect_timeout: 5
17
- }.freeze
18
-
19
- attr_accessor :servers, :reconnect, :reconnect_time_wait,
20
- :max_reconnect_attempts, :connect_timeout,
21
- :name, :user, :pass, :token
22
- attr_reader :additional_opts
23
-
24
- def initialize(servers: nil, **opts)
25
- @servers = normalize_servers(servers) if servers
26
- @additional_opts = {}
27
-
28
- DEFAULT_OPTS.merge(opts).each do |key, value|
29
- if respond_to?(:"#{key}=")
30
- send(:"#{key}=", value)
31
- else
32
- @additional_opts[key] = value
33
- end
34
- end
35
- end
36
-
37
- def self.build(opts = {})
38
- new(**opts)
39
- end
40
-
41
- def to_h
42
- base = {
43
- reconnect: @reconnect,
44
- reconnect_time_wait: @reconnect_time_wait,
45
- max_reconnect_attempts: @max_reconnect_attempts,
46
- connect_timeout: @connect_timeout
47
- }
48
-
49
- base[:servers] = @servers if @servers
50
- base[:name] = @name if @name
51
- base[:user] = @user if @user
52
- base[:pass] = @pass if @pass
53
- base[:token] = @token if @token
54
-
55
- base.merge(@additional_opts)
56
- end
57
-
58
- private
59
-
60
- def normalize_servers(servers)
61
- Array(servers)
62
- .flat_map { |s| s.to_s.split(',') }
63
- .map(&:strip)
64
- .reject(&:empty?)
65
- end
66
- end
67
-
68
- class << self
69
- # Create connection options from config
70
- def build_options(config = JetstreamBridge.config)
71
- servers = config.nats_urls
72
- raise ConnectionNotEstablishedError, 'No NATS URLs configured' if servers.to_s.strip.empty?
73
-
74
- ConnectionOptions.new(
75
- servers: servers,
76
- name: "#{config.app_name}-#{config.env}"
77
- )
78
- end
79
-
80
- # Create a new NATS client
81
- def create_client(options = nil)
82
- opts = options || build_options
83
- client = NATS::IO::Client.new
84
- client.connect(opts.to_h)
85
- client
86
- end
87
-
88
- # Create JetStream context with health monitoring
89
- def create_jetstream(client)
90
- jts = client.jetstream
91
-
92
- # Ensure JetStream responds to #nc
93
- jts.define_singleton_method(:nc) { client } unless jts.respond_to?(:nc)
94
-
95
- jts
96
- end
97
- end
98
- end
99
- end
100
- end