karafka-sidekiq-backend 1.2.0.beta2 → 1.2.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -1
- data/Gemfile.lock +4 -5
- data/README.md +2 -25
- data/lib/karafka/backends/sidekiq.rb +4 -2
- data/lib/karafka/base_worker.rb +1 -1
- data/lib/karafka/interchanger.rb +12 -22
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1e9d5b7c2a522e2ff126eca4b34ffc37efe1d4e9117d6996daf6b9fd959f393
|
4
|
+
data.tar.gz: ecf5117a7726db83707021ffeeab152b51d0f1e044fae590c8f2018ed94d52c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41ab55ab65c5750ae7d2b4a4ec844da5049612f4a8e59419177dd1e85a43ff4e992a622dc6be9ee335dffd8a39ae5526fb16eaf10af27981f5494106f132441a
|
7
|
+
data.tar.gz: af65c10503038935f1a892aef9a231611196ea8c06a683b54e3cd6cf07f944e91cce13f19832b49070e7850a65ffd790a822091eb002dc7dfc6c575bb311f874
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Karafka Sidekiq Backend
|
2
2
|
|
3
|
-
## 1.2.0.
|
3
|
+
## 1.2.0.beta3
|
4
|
+
- ```#load``` and ```#parse``` are renamed to ```#encode``` and ```#decode``` in interchangers
|
5
|
+
- Default interchanger is not Base64 Marshal dump
|
4
6
|
- #274 - Rename controllers to consumers
|
5
7
|
- Karafka 1.2 support
|
6
8
|
- Parse data before pushing to Sidekiq
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
karafka-sidekiq-backend (1.2.0.
|
4
|
+
karafka-sidekiq-backend (1.2.0.beta3)
|
5
5
|
karafka (>= 1.2.0.beta2)
|
6
6
|
sidekiq (>= 4.2)
|
7
7
|
|
@@ -81,7 +81,7 @@ GEM
|
|
81
81
|
multi_json (1.13.1)
|
82
82
|
null-logger (0.1.4)
|
83
83
|
rack (2.0.4)
|
84
|
-
rack-protection (2.0.
|
84
|
+
rack-protection (2.0.1)
|
85
85
|
rack
|
86
86
|
rake (12.3.0)
|
87
87
|
redis (4.0.1)
|
@@ -116,13 +116,12 @@ GEM
|
|
116
116
|
timecop (0.9.1)
|
117
117
|
tzinfo (1.2.5)
|
118
118
|
thread_safe (~> 0.1)
|
119
|
-
waterdrop (1.2.0
|
120
|
-
delivery_boy (
|
119
|
+
waterdrop (1.2.0)
|
120
|
+
delivery_boy (~> 0.2)
|
121
121
|
dry-configurable (~> 0.7)
|
122
122
|
dry-monitor (~> 0.1)
|
123
123
|
dry-validation (~> 0.11)
|
124
124
|
null-logger
|
125
|
-
ruby-kafka (>= 0.5.3)
|
126
125
|
|
127
126
|
PLATFORMS
|
128
127
|
ruby
|
data/README.md
CHANGED
@@ -85,9 +85,9 @@ Note that even then, you need to specify a controller that will schedule a backg
|
|
85
85
|
Custom workers need to provide a ```#perform_async``` method. It needs to accept two arguments:
|
86
86
|
|
87
87
|
- ```topic_id``` - first argument is a current topic id from which a given message comes
|
88
|
-
- ```
|
88
|
+
- ```params_batch``` - all the params that came from Kafka + additional metadata. This data format might be changed if you use custom interchangers. Otherwise it will be an instance of Karafka::Params::ParamsBatch.
|
89
89
|
|
90
|
-
|
90
|
+
**Note**: If you use custom interchangers, keep in mind, that params inside params batch might be in two states: parsed or unparsed when passed to #perform_async. This means, that if you use custom interchangers and/or custom workers, you might want to look into Karafka's sources to see exactly how it works.
|
91
91
|
|
92
92
|
### Interchangers
|
93
93
|
|
@@ -95,29 +95,6 @@ Custom interchangers target issues with non-standard (binary, etc.) data that we
|
|
95
95
|
|
96
96
|
**Warning**: if you decide to use slow interchangers, they might significantly slow down Karafka.
|
97
97
|
|
98
|
-
```ruby
|
99
|
-
class Base64Interchanger
|
100
|
-
class << self
|
101
|
-
def load(params_batch)
|
102
|
-
params_batch.map do |params|
|
103
|
-
Base64.encode64(Marshal.dump(params))
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def parse(params_batch)
|
108
|
-
params_batch.map do |params|
|
109
|
-
Marshal.load(Base64.decode64(params))
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
topic :binary_video_details do
|
116
|
-
controller Videos::DetailsController
|
117
|
-
interchanger Base64Interchanger
|
118
|
-
end
|
119
|
-
```
|
120
|
-
|
121
98
|
## References
|
122
99
|
|
123
100
|
* [Karafka framework](https://github.com/karafka/karafka)
|
@@ -5,7 +5,7 @@ module Karafka
|
|
5
5
|
# Sidekiq backend that schedules stuff to Sidekiq worker for delayed execution
|
6
6
|
module Sidekiq
|
7
7
|
# Karafka Sidekiq backend version
|
8
|
-
VERSION = '1.2.0.
|
8
|
+
VERSION = '1.2.0.beta3'
|
9
9
|
|
10
10
|
# Enqueues the execution of perform method into a worker.
|
11
11
|
# @note Each worker needs to have a class #perform_async method that will allow us to pass
|
@@ -13,10 +13,12 @@ module Karafka
|
|
13
13
|
# params_batch as a second one (we pass topic to be able to build back the consumer
|
14
14
|
# in the worker)
|
15
15
|
def process
|
16
|
+
Karafka.monitor.instrument('backends.sidekiq.process', caller: self) do
|
16
17
|
topic.worker.perform_async(
|
17
18
|
topic.id,
|
18
|
-
topic.interchanger.
|
19
|
+
topic.interchanger.encode(params_batch)
|
19
20
|
)
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
data/lib/karafka/base_worker.rb
CHANGED
@@ -25,7 +25,7 @@ module Karafka
|
|
25
25
|
def consumer(topic_id, params_batch)
|
26
26
|
topic = Karafka::Routing::Router.find(topic_id)
|
27
27
|
consumer = topic.consumer.new
|
28
|
-
consumer.params_batch = topic.interchanger.
|
28
|
+
consumer.params_batch = topic.interchanger.decode(params_batch)
|
29
29
|
consumer
|
30
30
|
end
|
31
31
|
end
|
data/lib/karafka/interchanger.rb
CHANGED
@@ -5,38 +5,28 @@ module Karafka
|
|
5
5
|
# This is meant to target mostly issues with data encoding like this one:
|
6
6
|
# https://github.com/mperham/sidekiq/issues/197
|
7
7
|
# Each custom interchanger should implement following methods:
|
8
|
-
# -
|
9
|
-
# -
|
8
|
+
# - encode - it is meant to encode params before they get stored inside Redis
|
9
|
+
# - decode - decoded params back to a hash format that we can use
|
10
|
+
#
|
11
|
+
# This interchanger is not the fastets but it handles many unusual cases and deals well with
|
12
|
+
# more complex Ruby and Rails objects
|
10
13
|
class Interchanger
|
11
14
|
class << self
|
12
15
|
# @param params_batch [Karafka::Params::ParamsBatch] Karafka params batch object
|
13
16
|
# @note Params might not be parsed because of lazy loading feature. If you implement your
|
14
17
|
# own interchanger logic, this method needs to return data that can be converted to
|
15
18
|
# json with default Sidekiqs logic
|
16
|
-
# @return [
|
19
|
+
# @return [String] parsed params batch encoded into a string. There are too many problems
|
17
20
|
# with passing unparsed data from Karafka to Sidekiq, to make it a default. In case you
|
18
21
|
# need this, please implement your own interchanger.
|
19
|
-
def
|
20
|
-
params_batch.parsed
|
22
|
+
def encode(params_batch)
|
23
|
+
Base64.encode64(Marshal.dump(params_batch.parsed))
|
21
24
|
end
|
22
25
|
|
23
|
-
# @param params_batch [
|
24
|
-
# @
|
25
|
-
|
26
|
-
|
27
|
-
# your own custom parser
|
28
|
-
def parse(params_batch)
|
29
|
-
params_batch.map! do |params|
|
30
|
-
Karafka::Params::Params::SYSTEM_KEYS.each do |key|
|
31
|
-
stringified_key = key.to_s
|
32
|
-
next unless params.key?(stringified_key)
|
33
|
-
params[key] ||= params.delete(stringified_key)
|
34
|
-
end
|
35
|
-
|
36
|
-
params
|
37
|
-
end
|
38
|
-
|
39
|
-
params_batch
|
26
|
+
# @param params_batch [String] Encoded params batch string that we use to rebuild params
|
27
|
+
# @return [Karafka::Params::ParamsBatch] rebuilt params batch
|
28
|
+
def decode(params_batch)
|
29
|
+
Marshal.load(Base64.decode64(params_batch))
|
40
30
|
end
|
41
31
|
end
|
42
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: karafka-sidekiq-backend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.0.
|
4
|
+
version: 1.2.0.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Mensfeld
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: karafka
|
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
87
|
version: 1.3.1
|
88
88
|
requirements: []
|
89
89
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.7.
|
90
|
+
rubygems_version: 2.7.6
|
91
91
|
signing_key:
|
92
92
|
specification_version: 4
|
93
93
|
summary: Karafka Sidekiq backend for background messages processing
|