shoryuken 3.0.11 → 3.1.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/.travis.yml +1 -0
- data/CHANGELOG.md +13 -2
- data/Gemfile +1 -0
- data/README.md +15 -110
- data/bin/cli/sqs.rb +7 -0
- data/lib/shoryuken.rb +39 -173
- data/lib/shoryuken/default_worker_registry.rb +2 -2
- data/lib/shoryuken/environment_loader.rb +25 -9
- data/lib/shoryuken/fetcher.rb +17 -16
- data/lib/shoryuken/launcher.rb +86 -7
- data/lib/shoryuken/manager.rb +38 -79
- data/lib/shoryuken/options.rb +192 -0
- data/lib/shoryuken/polling/base.rb +67 -0
- data/lib/shoryuken/polling/strict_priority.rb +77 -0
- data/lib/shoryuken/polling/weighted_round_robin.rb +66 -0
- data/lib/shoryuken/processor.rb +21 -18
- data/lib/shoryuken/runner.rb +3 -15
- data/lib/shoryuken/version.rb +1 -1
- data/spec/integration/launcher_spec.rb +12 -6
- data/spec/shoryuken/environment_loader_spec.rb +3 -12
- data/spec/shoryuken/fetcher_spec.rb +30 -15
- data/spec/shoryuken/manager_spec.rb +9 -17
- data/spec/shoryuken/options_spec.rb +100 -0
- data/spec/shoryuken/{polling_spec.rb → polling/strict_priority_spec.rb} +1 -100
- data/spec/shoryuken/polling/weighted_round_robin_spec.rb +99 -0
- data/spec/shoryuken/processor_spec.rb +20 -39
- data/spec/shoryuken/runner_spec.rb +3 -4
- data/spec/shoryuken_spec.rb +0 -59
- data/spec/spec_helper.rb +7 -2
- metadata +12 -5
- data/lib/shoryuken/polling.rb +0 -204
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 779c3e9c7f708f0a6dccb3e8b0c9f7e2490b25e1
|
4
|
+
data.tar.gz: bf260a2793ff8c07ddfb670832ba5f12af8d85d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f3e7a4b668c929daa1b5424b7a8ab7f028238b3f6dfe0e812351991bbc37923b58491760df6e4ed4921624cd4954761daeac257c6a540fd193d160d121044de
|
7
|
+
data.tar.gz: 02f2bf2e813cbe1624ae83d16936196ecf523fe8d3773f9b0c39813aa0822d3c71fd273ee01a63072c20d86bf05f4c1a775eda3fae41cec4bf55ea567f772aef
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,17 @@
|
|
1
|
+
## [v3.1.0] - 2017-07-02
|
2
|
+
|
3
|
+
- Add shoryuken sqs delete command
|
4
|
+
- [#395](https://github.com/phstc/shoryuken/pull/395)
|
5
|
+
|
6
|
+
- Add processing groups support; Concurrency per queue support
|
7
|
+
- [#389](https://github.com/phstc/shoryuken/pull/389)
|
8
|
+
|
9
|
+
- Terminate Shoryuken if the fetcher crashes
|
10
|
+
- [#389](https://github.com/phstc/shoryuken/pull/389)
|
11
|
+
|
1
12
|
## [v3.0.11] - 2017-06-24
|
2
13
|
|
3
|
-
- Add shoryuken sqs create
|
14
|
+
- Add shoryuken sqs create command
|
4
15
|
- [#388](https://github.com/phstc/shoryuken/pull/388)
|
5
16
|
|
6
17
|
## [v3.0.10] - 2017-06-24
|
@@ -8,7 +19,7 @@
|
|
8
19
|
- Allow aws sdk v3
|
9
20
|
- [#381](https://github.com/phstc/shoryuken/pull/381)
|
10
21
|
|
11
|
-
- Allow configuring Rails via the config file
|
22
|
+
- Allow configuring Rails via the config file
|
12
23
|
- [#387](https://github.com/phstc/shoryuken/pull/387)
|
13
24
|
|
14
25
|
## [v3.0.9] - 2017-06-05
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,35 +1,23 @@
|
|
1
1
|
# Shoryuken
|
2
2
|
|
3
|
-

|
3
|
+

|
4
4
|
|
5
|
-
Shoryuken _sho-ryu-ken_ is a super-efficient [
|
5
|
+
Shoryuken _sho-ryu-ken_ is a super-efficient [Amazon SQS](https://aws.amazon.com/sqs/) thread-based message processor.
|
6
6
|
|
7
7
|
[](https://travis-ci.org/phstc/shoryuken)
|
8
8
|
[](https://codeclimate.com/github/phstc/shoryuken)
|
9
9
|
|
10
10
|
## Key features
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- [normal_priority, 2]
|
22
|
-
- [low_priority, 1]
|
23
|
-
```
|
24
|
-
|
25
|
-
Or you can set them all to 1 for having the same priorities.
|
26
|
-
|
27
|
-
- `concurrency` (default 25) is the number of threads you want to make available for processing.
|
28
|
-
- `delay` (default to 0) is the number of seconds to pause fetching from an empty queue. SQS charges per request, pause checking empty queues for a while can be a cost efficient strategy.
|
29
|
-
|
30
|
-
### Fetch in batches
|
31
|
-
|
32
|
-
To be even more performant and cost effective, Shoryuken fetches SQS messages in batches, so a single SQS request can fetch up to 10 messages.
|
12
|
+
- [Rails Active Job](https://github.com/phstc/shoryuken/wiki/Rails-Integration-Active-Job)
|
13
|
+
- [Queue Load balancing](https://github.com/phstc/shoryuken/wiki/Shoryuken-options#load-balancing)
|
14
|
+
- [Concurrency per queue](https://github.com/phstc/shoryuken/wiki/Processing-Groups)
|
15
|
+
- [Long Polling](https://github.com/phstc/shoryuken/wiki/Long-Polling)
|
16
|
+
- [Batch processing](https://github.com/phstc/shoryuken/wiki/Worker-options#batch)
|
17
|
+
- [Auto extend visibility timeout](https://github.com/phstc/shoryuken/wiki/Worker-options#auto_visibility_timeout)
|
18
|
+
- [Exponential backoff](https://github.com/phstc/shoryuken/wiki/Worker-options#retry_intervals)
|
19
|
+
- [Middleware support](https://github.com/phstc/shoryuken/wiki/Middleware)
|
20
|
+
- Amazon SQS CLI. See `shoryuken help sqs`
|
33
21
|
|
34
22
|
## Requirements
|
35
23
|
|
@@ -43,102 +31,19 @@ Add this line to your application's Gemfile:
|
|
43
31
|
gem 'shoryuken'
|
44
32
|
```
|
45
33
|
|
46
|
-
Or to get the latest updates:
|
47
|
-
|
48
|
-
```ruby
|
49
|
-
gem 'shoryuken', github: 'phstc/shoryuken', branch: 'master'
|
50
|
-
```
|
51
|
-
|
52
34
|
And then execute:
|
53
35
|
|
54
|
-
$ bundle
|
55
|
-
|
56
|
-
Or install it yourself as:
|
57
|
-
|
58
|
-
$ gem install shoryuken
|
59
|
-
|
60
|
-
## Usage
|
61
|
-
|
62
|
-
### Worker class
|
63
|
-
|
64
|
-
```ruby
|
65
|
-
class MyWorker
|
66
|
-
include Shoryuken::Worker
|
67
|
-
|
68
|
-
shoryuken_options queue: 'default', auto_delete: true
|
69
|
-
# shoryuken_options queue: ->{ "#{ENV['environment']}_default" }
|
70
|
-
|
71
|
-
# shoryuken_options body_parser: :json
|
72
|
-
# shoryuken_options body_parser: ->(sqs_msg){ REXML::Document.new(sqs_msg.body) }
|
73
|
-
# shoryuken_options body_parser: JSON
|
74
|
-
|
75
|
-
def perform(sqs_msg, body)
|
76
|
-
puts body
|
77
|
-
end
|
78
|
-
end
|
79
|
-
```
|
80
|
-
|
81
|
-
[Check the Worker options documention](https://github.com/phstc/shoryuken/wiki/Worker-options).
|
82
|
-
|
83
|
-
### Sending a message
|
84
|
-
|
85
|
-
[Check the Sending a message documentation](https://github.com/phstc/shoryuken/wiki/Sending-a-message)
|
86
|
-
|
87
|
-
### Middleware
|
88
|
-
|
89
|
-
```ruby
|
90
|
-
class MyMiddleware
|
91
|
-
def call(worker_instance, queue, sqs_msg, body)
|
92
|
-
puts 'Before work'
|
93
|
-
yield
|
94
|
-
puts 'After work'
|
95
|
-
end
|
96
|
-
end
|
97
|
-
```
|
98
|
-
|
99
|
-
[Check the Middleware documentation](https://github.com/phstc/shoryuken/wiki/Middleware).
|
100
|
-
|
101
|
-
### Shoryuken Configuration
|
102
|
-
|
103
|
-
Sample configuration file `shoryuken.yml`.
|
104
|
-
|
105
|
-
```yaml
|
106
|
-
concurrency: 25 # The number of allocated threads to process messages. Default 25
|
107
|
-
delay: 0 # The delay in seconds to pause empty queues. Default 0
|
108
|
-
queues:
|
109
|
-
- [queue1, 1]
|
110
|
-
- [queue2, 1]
|
111
|
-
- [queue3, 1]
|
112
|
-
```
|
113
|
-
|
114
|
-
#### AWS Configuration
|
115
|
-
|
116
|
-
[Check the Configure AWS Client documentation](https://github.com/phstc/shoryuken/wiki/Configure-the-AWS-Client)
|
117
|
-
|
118
|
-
### Rails Integration
|
119
|
-
|
120
|
-
[Check the Rails Integration Active Job documention](https://github.com/phstc/shoryuken/wiki/Rails-Integration-Active-Job).
|
121
|
-
|
122
|
-
### Start Shoryuken
|
123
|
-
|
124
36
|
```shell
|
125
|
-
bundle
|
37
|
+
$ bundle
|
126
38
|
```
|
127
39
|
|
128
|
-
|
129
|
-
|
130
|
-
#### SQS commands
|
131
|
-
|
132
|
-
Check also some available SQS commands `bundle exec shoryuken help sqs`, such as:
|
40
|
+
## Usage
|
133
41
|
|
134
|
-
|
135
|
-
- `mv` move messages from one queue to another
|
136
|
-
- `dump` dump messages from a queue into a JSON lines file
|
137
|
-
- `requeue` requeue messages from a dump file
|
42
|
+
Check the [Getting Started](https://github.com/phstc/shoryuken/wiki/Getting-Started) page.
|
138
43
|
|
139
44
|
## More Information
|
140
45
|
|
141
|
-
For more information
|
46
|
+
For more information check the [wiki page](https://github.com/phstc/shoryuken/wiki).
|
142
47
|
|
143
48
|
## Credits
|
144
49
|
|
data/bin/cli/sqs.rb
CHANGED
@@ -192,6 +192,13 @@ module Shoryuken
|
|
192
192
|
|
193
193
|
say "Queue #{queue_name} was successfully created. Queue URL #{queue_url}", :green
|
194
194
|
end
|
195
|
+
|
196
|
+
desc 'delete QUEUE-NAME', 'delete a queue'
|
197
|
+
def delete(queue_name)
|
198
|
+
sqs.delete_queue(queue_url: find_queue_url(queue_name))
|
199
|
+
|
200
|
+
say "Queue #{queue_name} was successfully delete", :green
|
201
|
+
end
|
195
202
|
end
|
196
203
|
end
|
197
204
|
end
|
data/lib/shoryuken.rb
CHANGED
@@ -20,185 +20,51 @@ require 'shoryuken/middleware/server/auto_delete'
|
|
20
20
|
Shoryuken::Middleware::Server.autoload :AutoExtendVisibility, 'shoryuken/middleware/server/auto_extend_visibility'
|
21
21
|
require 'shoryuken/middleware/server/exponential_backoff_retry'
|
22
22
|
require 'shoryuken/middleware/server/timing'
|
23
|
-
require 'shoryuken/polling'
|
23
|
+
require 'shoryuken/polling/base'
|
24
|
+
require 'shoryuken/polling/weighted_round_robin'
|
25
|
+
require 'shoryuken/polling/strict_priority'
|
24
26
|
require 'shoryuken/manager'
|
25
27
|
require 'shoryuken/launcher'
|
26
28
|
require 'shoryuken/processor'
|
27
29
|
require 'shoryuken/fetcher'
|
30
|
+
require 'shoryuken/options'
|
28
31
|
|
29
32
|
module Shoryuken
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
def worker_registry=(worker_registry)
|
67
|
-
@@worker_registry = worker_registry
|
68
|
-
end
|
69
|
-
|
70
|
-
def start_callback
|
71
|
-
@@start_callback
|
72
|
-
end
|
73
|
-
|
74
|
-
def start_callback=(start_callback)
|
75
|
-
@@start_callback = start_callback
|
76
|
-
end
|
77
|
-
|
78
|
-
def stop_callback
|
79
|
-
@@stop_callback
|
80
|
-
end
|
81
|
-
|
82
|
-
def stop_callback=(stop_callback)
|
83
|
-
@@stop_callback = stop_callback
|
84
|
-
end
|
85
|
-
|
86
|
-
def active_job_queue_name_prefixing
|
87
|
-
@@active_job_queue_name_prefixing
|
88
|
-
end
|
89
|
-
|
90
|
-
def active_job_queue_name_prefixing=(active_job_queue_name_prefixing)
|
91
|
-
@@active_job_queue_name_prefixing = active_job_queue_name_prefixing
|
92
|
-
end
|
93
|
-
|
94
|
-
def sqs_client
|
95
|
-
@@sqs_client ||= Aws::SQS::Client.new
|
96
|
-
end
|
97
|
-
|
98
|
-
def sqs_client=(sqs_client)
|
99
|
-
@@sqs_client = sqs_client
|
100
|
-
end
|
101
|
-
|
102
|
-
def sqs_client_receive_message_opts
|
103
|
-
@@sqs_client_receive_message_opts
|
104
|
-
end
|
105
|
-
|
106
|
-
def sqs_client_receive_message_opts=(sqs_client_receive_message_opts)
|
107
|
-
@@sqs_client_receive_message_opts = sqs_client_receive_message_opts
|
108
|
-
end
|
109
|
-
|
110
|
-
def options
|
111
|
-
@@options ||= DEFAULTS.dup
|
112
|
-
end
|
113
|
-
|
114
|
-
def logger
|
115
|
-
Shoryuken::Logging.logger
|
116
|
-
end
|
117
|
-
|
118
|
-
def register_worker(*args)
|
119
|
-
@@worker_registry.register_worker(*args)
|
120
|
-
end
|
121
|
-
|
122
|
-
def configure_server
|
123
|
-
yield self if server?
|
124
|
-
end
|
125
|
-
|
126
|
-
def server_middleware
|
127
|
-
@@server_chain ||= default_server_middleware
|
128
|
-
yield @@server_chain if block_given?
|
129
|
-
@@server_chain
|
130
|
-
end
|
131
|
-
|
132
|
-
def configure_client
|
133
|
-
yield self unless server?
|
134
|
-
end
|
135
|
-
|
136
|
-
def client_middleware
|
137
|
-
@@client_chain ||= default_client_middleware
|
138
|
-
yield @@client_chain if block_given?
|
139
|
-
@@client_chain
|
140
|
-
end
|
141
|
-
|
142
|
-
def default_worker_options
|
143
|
-
@@default_worker_options ||= {
|
144
|
-
'queue' => 'default',
|
145
|
-
'delete' => false,
|
146
|
-
'auto_delete' => false,
|
147
|
-
'auto_visibility_timeout' => false,
|
148
|
-
'retry_intervals' => nil,
|
149
|
-
'batch' => false
|
150
|
-
}
|
151
|
-
end
|
152
|
-
|
153
|
-
def default_worker_options=(default_worker_options)
|
154
|
-
@@default_worker_options = default_worker_options
|
155
|
-
end
|
156
|
-
|
157
|
-
def on_start(&block)
|
158
|
-
@@start_callback = block
|
159
|
-
end
|
160
|
-
|
161
|
-
def on_stop(&block)
|
162
|
-
@@stop_callback = block
|
163
|
-
end
|
164
|
-
|
165
|
-
# Register a block to run at a point in the Shoryuken lifecycle.
|
166
|
-
# :startup, :quiet or :shutdown are valid events.
|
167
|
-
#
|
168
|
-
# Shoryuken.configure_server do |config|
|
169
|
-
# config.on(:shutdown) do
|
170
|
-
# puts "Goodbye cruel world!"
|
171
|
-
# end
|
172
|
-
# end
|
173
|
-
def on(event, &block)
|
174
|
-
fail ArgumentError, "Symbols only please: #{event}" unless event.is_a?(Symbol)
|
175
|
-
fail ArgumentError, "Invalid event name: #{event}" unless options[:lifecycle_events].key?(event)
|
176
|
-
options[:lifecycle_events][event] << block
|
177
|
-
end
|
178
|
-
|
179
|
-
private
|
180
|
-
|
181
|
-
def default_server_middleware
|
182
|
-
Middleware::Chain.new do |m|
|
183
|
-
m.add Middleware::Server::Timing
|
184
|
-
m.add Middleware::Server::ExponentialBackoffRetry
|
185
|
-
m.add Middleware::Server::AutoDelete
|
186
|
-
m.add Middleware::Server::AutoExtendVisibility
|
187
|
-
if defined?(::ActiveRecord::Base)
|
188
|
-
require 'shoryuken/middleware/server/active_record'
|
189
|
-
m.add Middleware::Server::ActiveRecord
|
190
|
-
end
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
def default_client_middleware
|
195
|
-
Middleware::Chain.new
|
196
|
-
end
|
197
|
-
|
198
|
-
def server?
|
199
|
-
defined?(Shoryuken::CLI)
|
200
|
-
end
|
201
|
-
end
|
33
|
+
extend SingleForwardable
|
34
|
+
|
35
|
+
def_delegators(
|
36
|
+
:'Shoryuken::Options',
|
37
|
+
:add_group,
|
38
|
+
:groups,
|
39
|
+
:add_queue,
|
40
|
+
:ungrouped_queues,
|
41
|
+
:worker_registry,
|
42
|
+
:worker_registry=,
|
43
|
+
:polling_strategy,
|
44
|
+
:start_callback,
|
45
|
+
:start_callback=,
|
46
|
+
:stop_callback,
|
47
|
+
:stop_callback=,
|
48
|
+
:active_job_queue_name_prefixing,
|
49
|
+
:active_job_queue_name_prefixing=,
|
50
|
+
:sqs_client,
|
51
|
+
:sqs_client=,
|
52
|
+
:sqs_client_receive_message_opts,
|
53
|
+
:sqs_client_receive_message_opts=,
|
54
|
+
:options,
|
55
|
+
:logger,
|
56
|
+
:register_worker,
|
57
|
+
:configure_server,
|
58
|
+
:server?,
|
59
|
+
:server_middleware,
|
60
|
+
:configure_client,
|
61
|
+
:client_middleware,
|
62
|
+
:default_worker_options,
|
63
|
+
:default_worker_options=,
|
64
|
+
:on_start,
|
65
|
+
:on_stop,
|
66
|
+
:on
|
67
|
+
)
|
202
68
|
end
|
203
69
|
|
204
70
|
require 'shoryuken/extensions/active_job_adapter' if defined?(::ActiveJob)
|