sbmt-kafka_producer 2.0.0 → 2.2.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 +12 -0
- data/README.md +4 -0
- data/lib/sbmt/kafka_producer/base_producer.rb +6 -1
- data/lib/sbmt/kafka_producer/kafka_client_factory.rb +18 -3
- data/lib/sbmt/kafka_producer/version.rb +1 -1
- 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: 4f2c9bec545e5dd939135a388d69acd38c4adfbc65c5d0f9db1cfc94d5431290
|
4
|
+
data.tar.gz: 77d7376225e878c89499bb19bea8cd87230b247a4b238856fc2724101872a9f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fb93062edacf5150ad961b79031acdbc4adcf7cf823563014b041bd69e78cb988caf46b107b5f27c6fb0eafdc8d460da2b88c3279786aedf7534a3ad4febfb2
|
7
|
+
data.tar.gz: 11cc83bda4221bac3b65be54606d75dbb2c1acc7e55d6cb41012207ad78fc6715d1bdc3fc8da58ff1bd45d339bdfc2a77167bc7af7115c005d0aa9dd77e536ae
|
data/CHANGELOG.md
CHANGED
@@ -13,6 +13,18 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
13
13
|
|
14
14
|
### Fixed
|
15
15
|
|
16
|
+
## [2.2.0] - 2024-04-12
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
|
20
|
+
- Add logs with `offset`.
|
21
|
+
|
22
|
+
## [2.1.0] - 2024-03-14
|
23
|
+
|
24
|
+
### Changed
|
25
|
+
|
26
|
+
- Memoize kafka clients. Add a registry with them to KafkaClientFactory.
|
27
|
+
|
16
28
|
## [2.0.0] - 2024-01-29
|
17
29
|
|
18
30
|
### Changed
|
data/README.md
CHANGED
@@ -19,6 +19,10 @@ And then execute:
|
|
19
19
|
bundle install
|
20
20
|
```
|
21
21
|
|
22
|
+
## Demo
|
23
|
+
|
24
|
+
Learn how to use this gem and how it works with Ruby on Rails at here https://github.com/SberMarket-Tech/outbox-example-apps
|
25
|
+
|
22
26
|
## Auto configuration
|
23
27
|
|
24
28
|
We recommend going through the configuration and file creation process using the following Rails generators. Each generator can be run by using the `--help` option to learn more about the available arguments.
|
@@ -9,9 +9,10 @@ module Sbmt
|
|
9
9
|
option :topic
|
10
10
|
|
11
11
|
def sync_publish!(payload, options = {})
|
12
|
-
around_publish do
|
12
|
+
report = around_publish do
|
13
13
|
client.produce_sync(payload: payload, **options.merge(topic: topic))
|
14
14
|
end
|
15
|
+
log_success(report)
|
15
16
|
true
|
16
17
|
end
|
17
18
|
|
@@ -81,6 +82,10 @@ module Sbmt
|
|
81
82
|
ErrorTracker.error(error)
|
82
83
|
end
|
83
84
|
|
85
|
+
def log_success(report)
|
86
|
+
logger.info "Message has been successfully sent to Kafka - topic: #{report.topic_name}, partition: #{report.partition}, offset: #{report.offset}"
|
87
|
+
end
|
88
|
+
|
84
89
|
def format_exception_error(error)
|
85
90
|
text = "#{format_exception_error(error.cause)}. " if with_cause?(error)
|
86
91
|
|
@@ -3,6 +3,9 @@
|
|
3
3
|
module Sbmt
|
4
4
|
module KafkaProducer
|
5
5
|
class KafkaClientFactory
|
6
|
+
CLIENTS_REGISTRY_MUTEX = Mutex.new
|
7
|
+
CLIENTS_REGISTRY = {}
|
8
|
+
|
6
9
|
class << self
|
7
10
|
def default_client
|
8
11
|
@default_client ||= ConnectionPool::Wrapper.new do
|
@@ -15,15 +18,27 @@ module Sbmt
|
|
15
18
|
def build(kafka = {})
|
16
19
|
return default_client if kafka.empty?
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
+
fetch_client(kafka) do
|
22
|
+
ConnectionPool::Wrapper.new do
|
23
|
+
WaterDrop::Producer.new do |config|
|
24
|
+
configure_client(config, kafka)
|
25
|
+
end
|
21
26
|
end
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
25
30
|
private
|
26
31
|
|
32
|
+
def fetch_client(kafka)
|
33
|
+
key = Digest::SHA1.hexdigest(Marshal.dump(kafka))
|
34
|
+
return CLIENTS_REGISTRY[key] if CLIENTS_REGISTRY.key?(key)
|
35
|
+
|
36
|
+
CLIENTS_REGISTRY_MUTEX.synchronize do
|
37
|
+
return CLIENTS_REGISTRY[key] if CLIENTS_REGISTRY.key?(key)
|
38
|
+
CLIENTS_REGISTRY[key] = yield
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
27
42
|
def configure_client(kafka_config, kafka_options = {})
|
28
43
|
kafka_config.logger = config.logger_class.classify.constantize.new
|
29
44
|
kafka_config.kafka = config.to_kafka_options.merge(custom_kafka_config(kafka_options)).symbolize_keys
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sbmt-kafka_producer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sbermarket Ruby-Platform Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: anyway_config
|