sbmt-kafka_producer 3.2.3 → 3.3.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/.rubocop.yml +4 -3
- data/CHANGELOG.md +6 -0
- data/README.md +26 -0
- data/lib/sbmt/kafka_producer/base_producer.rb +32 -2
- data/lib/sbmt/kafka_producer/version.rb +1 -1
- data/lib/sbmt/kafka_producer.rb +4 -0
- metadata +3 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1a04ccdd7308cf1a7971c783903dea73ed8fd199aa8def03ee953950f971162f
|
|
4
|
+
data.tar.gz: 349c6ee6e866e7d4f2d3a506e7873360d140f9fe12050fc106a9741984ebfbc4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e14803c9daf5acbe662e889a84594d059031a904987cc8c3485ce4ae0a5c8d175e479f1f1629ad5d89c3756821c6df3065688aa6787916ec6eefbd7d49b2302
|
|
7
|
+
data.tar.gz: 47165c0cffbd72225574c80846e108a0c3d6a7ecc267348f4adbef1f999bdbfb950cdc5edac153301ea731b224fdfc8da8f08bffb94fbd9ffa6ab738cd13af90
|
data/.rubocop.yml
CHANGED
|
@@ -20,9 +20,6 @@ AllCops:
|
|
|
20
20
|
TargetRubyVersion: 2.7
|
|
21
21
|
TargetRailsVersion: 6.0
|
|
22
22
|
|
|
23
|
-
RSpec/FilePath:
|
|
24
|
-
Enabled: false
|
|
25
|
-
|
|
26
23
|
RSpec/VerifiedDoubles:
|
|
27
24
|
Exclude:
|
|
28
25
|
- spec/**/*_spec.rb
|
|
@@ -32,3 +29,7 @@ Style/SingleLineMethods:
|
|
|
32
29
|
|
|
33
30
|
Style/EmptyMethod:
|
|
34
31
|
Enabled: false
|
|
32
|
+
|
|
33
|
+
Rails/Exit:
|
|
34
|
+
Exclude:
|
|
35
|
+
- spec/rails_helper.rb
|
data/CHANGELOG.md
CHANGED
|
@@ -13,6 +13,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
|
13
13
|
|
|
14
14
|
### Fixed
|
|
15
15
|
|
|
16
|
+
## [3.3.0] - 2025-12-05
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Added option `middlewares` to add middleware when producing a message
|
|
21
|
+
|
|
16
22
|
## [3.2.3] - 2025-04-02
|
|
17
23
|
|
|
18
24
|
### Fixed
|
data/README.md
CHANGED
|
@@ -153,6 +153,32 @@ outbox_items:
|
|
|
153
153
|
kafka: # optional kafka options
|
|
154
154
|
required_acks: -1
|
|
155
155
|
```
|
|
156
|
+
## Middlewares
|
|
157
|
+
|
|
158
|
+
Middleware is code configured to run before/after a message is produced.
|
|
159
|
+
|
|
160
|
+
To add middleware, specify it in the configuration
|
|
161
|
+
|
|
162
|
+
```ruby
|
|
163
|
+
# config/initializers/kafka_producer.rb
|
|
164
|
+
|
|
165
|
+
Sbmt::KafkaProducer.middlewares.push(
|
|
166
|
+
MyMiddleware
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
# path/to/middlewares
|
|
170
|
+
|
|
171
|
+
class MyMiddleware
|
|
172
|
+
def call(payload, options)
|
|
173
|
+
"Before producing"
|
|
174
|
+
result = yield
|
|
175
|
+
"After producing"
|
|
176
|
+
|
|
177
|
+
result
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
```
|
|
181
|
+
⚠️ note the method must return the result
|
|
156
182
|
|
|
157
183
|
## Usage
|
|
158
184
|
|
|
@@ -8,12 +8,13 @@ module Sbmt
|
|
|
8
8
|
MSG_SUCCESS = "Message has been successfully sent to Kafka"
|
|
9
9
|
|
|
10
10
|
option :client, default: -> { KafkaClientFactory.default_client }
|
|
11
|
+
option :middlewares, default: -> { Sbmt::KafkaProducer.middlewares }
|
|
11
12
|
option :topic
|
|
12
13
|
|
|
13
14
|
def sync_publish!(payload, options = {})
|
|
14
15
|
report, produce_duration = around_publish do
|
|
15
16
|
measure_time do
|
|
16
|
-
|
|
17
|
+
do_produce(:sync, payload, options.merge(topic: topic))
|
|
17
18
|
end
|
|
18
19
|
end
|
|
19
20
|
log_success(report, produce_duration)
|
|
@@ -30,7 +31,7 @@ module Sbmt
|
|
|
30
31
|
|
|
31
32
|
def async_publish!(payload, options = {})
|
|
32
33
|
around_publish do
|
|
33
|
-
|
|
34
|
+
do_produce(:async, payload, options.merge(topic: topic))
|
|
34
35
|
end
|
|
35
36
|
true
|
|
36
37
|
end
|
|
@@ -45,6 +46,35 @@ module Sbmt
|
|
|
45
46
|
|
|
46
47
|
private
|
|
47
48
|
|
|
49
|
+
def do_produce(type, payload, options)
|
|
50
|
+
call_middlewares(type, payload, options) do
|
|
51
|
+
if type == :sync
|
|
52
|
+
client.produce_sync(payload: payload, **options)
|
|
53
|
+
else
|
|
54
|
+
client.produce_async(payload: payload, **options)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def call_middlewares(type, payload, options)
|
|
60
|
+
return yield if middlewares.empty?
|
|
61
|
+
|
|
62
|
+
chain = middlewares.map { |middleware_class| middleware_class.new }
|
|
63
|
+
|
|
64
|
+
traverse_chain = proc do
|
|
65
|
+
if chain.empty?
|
|
66
|
+
yield
|
|
67
|
+
else
|
|
68
|
+
chain.shift.call(
|
|
69
|
+
payload,
|
|
70
|
+
options.deep_dup.merge(producing_type: type),
|
|
71
|
+
&traverse_chain
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
traverse_chain.call
|
|
76
|
+
end
|
|
77
|
+
|
|
48
78
|
def logger
|
|
49
79
|
::Sbmt::KafkaProducer.logger
|
|
50
80
|
end
|
data/lib/sbmt/kafka_producer.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sbmt-kafka_producer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kuper Ruby-Platform Team
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: anyway_config
|
|
@@ -354,7 +353,6 @@ dependencies:
|
|
|
354
353
|
version: '1.12'
|
|
355
354
|
description: This gem is used for producing Kafka messages. It represents a wrapper
|
|
356
355
|
over Waterdrop gem and is recommended for using as a transport with sbmt-outbox
|
|
357
|
-
email:
|
|
358
356
|
executables: []
|
|
359
357
|
extensions: []
|
|
360
358
|
extra_rdoc_files: []
|
|
@@ -411,7 +409,6 @@ metadata:
|
|
|
411
409
|
source_code_uri: https://github.com/Kuper-Tech/sbmt-kafka_producer
|
|
412
410
|
changelog_uri: https://github.com/Kuper-Tech/sbmt-kafka_producer/blob/master/CHANGELOG.md
|
|
413
411
|
rubygems_mfa_required: 'false'
|
|
414
|
-
post_install_message:
|
|
415
412
|
rdoc_options: []
|
|
416
413
|
require_paths:
|
|
417
414
|
- lib
|
|
@@ -426,8 +423,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
426
423
|
- !ruby/object:Gem::Version
|
|
427
424
|
version: '0'
|
|
428
425
|
requirements: []
|
|
429
|
-
rubygems_version: 3.
|
|
430
|
-
signing_key:
|
|
426
|
+
rubygems_version: 3.6.9
|
|
431
427
|
specification_version: 4
|
|
432
428
|
summary: Ruby gem for producing Kafka messages
|
|
433
429
|
test_files: []
|