deimos-ruby 2.2.2 → 2.2.3.pre.beta1
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/.gitignore +1 -0
- data/CHANGELOG.md +2 -0
- data/lib/deimos/backends/kafka.rb +1 -1
- data/lib/deimos/backends/kafka_async.rb +2 -1
- data/lib/deimos/metrics/datadog.rb +3 -1
- data/lib/deimos/utils/outbox_producer.rb +1 -1
- data/lib/deimos/version.rb +1 -1
- data/lib/deimos.rb +35 -15
- data/spec/deimos_spec.rb +31 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 06c3e1257753ef449b29b14aec9bc9d50c481def390540bd50469521e8ac0d2c
|
|
4
|
+
data.tar.gz: eb2fd72ae7e43197cfc3939cf3ceb499f50ba4a22100764220d53806984b1dba
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8f66a93ddf51ededa22eaa4ebd08bee6b572ea23736bf6b2b5ee65bbed96950ac42818f5fc22dc4afa946f10731d968744dde1717dc6a07de604894860c4f342
|
|
7
|
+
data.tar.gz: 9f480e7218b4636a05b16448521843299f560426e3c63e67939c153b29539b2651317b09388fda25d9cdece98e4cfa14c20bbd4cf19bdb9257cb8ddd67805950
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## UNRELEASED
|
|
9
9
|
|
|
10
|
+
- Feature: Support broker setting per topic in producer configs.
|
|
11
|
+
|
|
10
12
|
# 2.2.2 - 2025-11-7
|
|
11
13
|
|
|
12
14
|
- Fix: Calling `producer_classes` on a topic config could make all topics disappear. :(
|
|
@@ -4,9 +4,10 @@ module Deimos
|
|
|
4
4
|
module Backends
|
|
5
5
|
# Backend which produces to Kafka via an async producer.
|
|
6
6
|
class KafkaAsync < Base
|
|
7
|
+
|
|
7
8
|
# :nodoc:
|
|
8
9
|
def self.execute(producer_class:, messages:)
|
|
9
|
-
|
|
10
|
+
Deimos.producer_for(producer_class.topic).produce_many_async(messages)
|
|
10
11
|
end
|
|
11
12
|
end
|
|
12
13
|
end
|
|
@@ -58,7 +58,9 @@ module Deimos
|
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
60
|
Karafka::Setup::Config.setup if Karafka.producer.nil?
|
|
61
|
-
|
|
61
|
+
Deimos.waterdrop_producers.each do |producer|
|
|
62
|
+
producer.monitor.subscribe(waterdrop_listener)
|
|
63
|
+
end
|
|
62
64
|
end
|
|
63
65
|
|
|
64
66
|
# :nodoc:
|
|
@@ -207,7 +207,7 @@ module Deimos
|
|
|
207
207
|
|
|
208
208
|
batch[current_index..-1].in_groups_of(batch_size, false).each do |group|
|
|
209
209
|
@logger.debug("Publishing #{group.size} messages to #{@current_topic}")
|
|
210
|
-
|
|
210
|
+
Deimos.producer_for(@current_topic).produce_many_sync(group)
|
|
211
211
|
current_index += group.size
|
|
212
212
|
@logger.info("Sent #{group.size} messages to #{@current_topic}")
|
|
213
213
|
end
|
data/lib/deimos/version.rb
CHANGED
data/lib/deimos.rb
CHANGED
|
@@ -142,23 +142,34 @@ module Deimos
|
|
|
142
142
|
signal_handler.run!
|
|
143
143
|
end
|
|
144
144
|
|
|
145
|
-
def
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
145
|
+
def setup_producers
|
|
146
|
+
@producers = {}
|
|
147
|
+
producers_by_broker = {}
|
|
148
|
+
Deimos.karafka_configs.each do |topic|
|
|
149
|
+
broker = topic.kafka[:'bootstrap.servers']
|
|
150
|
+
producers_by_broker[broker] ||= ::WaterDrop::Producer.new do |p_config|
|
|
151
|
+
config_hash = Karafka::Setup::Config.config.kafka.merge(topic.kafka)
|
|
152
|
+
p_config.kafka = Karafka::Setup::AttributesMap.producer(config_hash)
|
|
153
|
+
end
|
|
154
|
+
@producers[topic.name] = producers_by_broker[broker]
|
|
155
|
+
end
|
|
156
|
+
end
|
|
153
157
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
def setup_karafka
|
|
159
|
+
setup_producers
|
|
160
|
+
waterdrop_producers.each do |producer|
|
|
161
|
+
producer.middleware.append(Deimos::ProducerMiddleware)
|
|
162
|
+
producer.monitor.subscribe(ProducerMetricsListener.new)
|
|
163
|
+
producer.monitor.subscribe('error.occurred') do |event|
|
|
164
|
+
if event.payload.key?(:messages)
|
|
165
|
+
topic = event[:messages].first[:topic]
|
|
166
|
+
config = Deimos.karafka_config_for(topic: topic)
|
|
167
|
+
message = Deimos::Logging.messages_log_text(config&.payload_log, event[:messages])
|
|
168
|
+
Karafka.logger.error("Error producing messages: #{event[:error].message} #{message.to_json}")
|
|
169
|
+
end
|
|
160
170
|
end
|
|
161
171
|
end
|
|
172
|
+
EVENT_TYPES.each { |type| Karafka.monitor.notifications_bus.register_event(type) }
|
|
162
173
|
end
|
|
163
174
|
|
|
164
175
|
# @return [Array<Karafka::Routing::Topic]
|
|
@@ -176,7 +187,16 @@ module Deimos
|
|
|
176
187
|
end
|
|
177
188
|
end
|
|
178
189
|
|
|
179
|
-
# @
|
|
190
|
+
# @return [Array<::WaterDrop::Producer>]
|
|
191
|
+
def waterdrop_producers
|
|
192
|
+
@producers.values + [Karafka.producer]
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# @param topic [String]
|
|
196
|
+
def producer_for(topic)
|
|
197
|
+
@producers[topic] || Karafka.producer
|
|
198
|
+
end
|
|
199
|
+
|
|
180
200
|
# @return [String,nil]
|
|
181
201
|
def topic_for_consumer(handler_class)
|
|
182
202
|
Deimos.karafka_configs.each do |topic|
|
data/spec/deimos_spec.rb
CHANGED
|
@@ -50,4 +50,35 @@ describe Deimos do
|
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
+
specify '#producer_for' do
|
|
54
|
+
Karafka::App.routes.redraw do
|
|
55
|
+
topic 'main-broker' do
|
|
56
|
+
active false
|
|
57
|
+
kafka({
|
|
58
|
+
'bootstrap.servers': 'broker1:9092'
|
|
59
|
+
})
|
|
60
|
+
end
|
|
61
|
+
topic 'main-broker2' do
|
|
62
|
+
active false
|
|
63
|
+
kafka({
|
|
64
|
+
'bootstrap.servers': 'broker1:9092'
|
|
65
|
+
})
|
|
66
|
+
end
|
|
67
|
+
topic 'other-broker' do
|
|
68
|
+
active false
|
|
69
|
+
kafka({
|
|
70
|
+
'bootstrap.servers': 'broker2:9092'
|
|
71
|
+
})
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
described_class.setup_producers
|
|
75
|
+
|
|
76
|
+
producer1 = described_class.producer_for('main-broker')
|
|
77
|
+
producer2 = described_class.producer_for('main-broker2')
|
|
78
|
+
producer3 = described_class.producer_for('other-broker')
|
|
79
|
+
expect(producer1).to eq(producer2)
|
|
80
|
+
expect(producer1.config.kafka[:'bootstrap.servers']).to eq('broker1:9092')
|
|
81
|
+
expect(producer3.config.kafka[:'bootstrap.servers']).to eq('broker2:9092')
|
|
82
|
+
end
|
|
83
|
+
|
|
53
84
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: deimos-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.2.
|
|
4
|
+
version: 2.2.3.pre.beta1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Orner
|
|
@@ -698,7 +698,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
698
698
|
- !ruby/object:Gem::Version
|
|
699
699
|
version: '0'
|
|
700
700
|
requirements: []
|
|
701
|
-
rubygems_version:
|
|
701
|
+
rubygems_version: 4.0.3
|
|
702
702
|
specification_version: 4
|
|
703
703
|
summary: Kafka libraries for Ruby.
|
|
704
704
|
test_files: []
|