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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +92 -337
- data/README.md +1 -5
- data/docs/GETTING_STARTED.md +11 -7
- data/docs/PRODUCTION.md +51 -11
- data/docs/TESTING.md +24 -35
- data/lib/generators/jetstream_bridge/health_check/health_check_generator.rb +1 -1
- data/lib/generators/jetstream_bridge/initializer/initializer_generator.rb +1 -1
- data/lib/generators/jetstream_bridge/initializer/templates/jetstream_bridge.rb +0 -4
- data/lib/generators/jetstream_bridge/install/install_generator.rb +5 -5
- data/lib/generators/jetstream_bridge/migrations/migrations_generator.rb +2 -2
- data/lib/jetstream_bridge/consumer/consumer.rb +34 -96
- data/lib/jetstream_bridge/consumer/health_monitor.rb +107 -0
- data/lib/jetstream_bridge/consumer/message_processor.rb +1 -1
- data/lib/jetstream_bridge/consumer/subscription_manager.rb +51 -34
- data/lib/jetstream_bridge/core/config.rb +153 -46
- data/lib/jetstream_bridge/core/connection_manager.rb +513 -0
- data/lib/jetstream_bridge/core/debug_helper.rb +9 -3
- data/lib/jetstream_bridge/core/health_checker.rb +184 -0
- data/lib/jetstream_bridge/core.rb +0 -2
- data/lib/jetstream_bridge/facade.rb +212 -0
- data/lib/jetstream_bridge/publisher/event_envelope_builder.rb +110 -0
- data/lib/jetstream_bridge/publisher/publisher.rb +87 -117
- data/lib/jetstream_bridge/rails/integration.rb +8 -5
- data/lib/jetstream_bridge/rails/railtie.rb +4 -3
- data/lib/jetstream_bridge/tasks/install.rake +0 -1
- data/lib/jetstream_bridge/topology/topology.rb +6 -1
- data/lib/jetstream_bridge/version.rb +1 -1
- data/lib/jetstream_bridge.rb +206 -297
- metadata +7 -5
- data/lib/jetstream_bridge/core/bridge_helpers.rb +0 -109
- data/lib/jetstream_bridge/core/connection.rb +0 -464
- 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
|