shoryuken 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 +5 -5
- data/.rubocop.yml +89 -23
- data/CHANGELOG.md +14 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -1
- data/bin/cli/base.rb +0 -1
- data/bin/cli/sqs.rb +3 -3
- data/bin/shoryuken +3 -9
- data/examples/bootstrap_queues.rb +3 -3
- data/examples/default_worker.rb +1 -1
- data/lib/shoryuken.rb +0 -1
- data/lib/shoryuken/core_ext.rb +1 -1
- data/lib/shoryuken/extensions/active_job_adapter.rb +1 -1
- data/lib/shoryuken/fetcher.rb +3 -3
- data/lib/shoryuken/logging.rb +1 -1
- data/lib/shoryuken/middleware/server/active_record.rb +1 -1
- data/lib/shoryuken/middleware/server/auto_delete.rb +1 -1
- data/lib/shoryuken/middleware/server/auto_extend_visibility.rb +1 -1
- data/lib/shoryuken/middleware/server/exponential_backoff_retry.rb +1 -1
- data/lib/shoryuken/middleware/server/timing.rb +12 -14
- data/lib/shoryuken/polling/base.rb +1 -1
- data/lib/shoryuken/polling/strict_priority.rb +8 -8
- data/lib/shoryuken/queue.rb +3 -3
- data/lib/shoryuken/runner.rb +9 -3
- data/lib/shoryuken/version.rb +1 -1
- data/lib/shoryuken/worker/inline_executor.rb +12 -3
- data/lib/shoryuken/worker_registry.rb +4 -4
- data/shoryuken.gemspec +5 -5
- data/spec/integration/launcher_spec.rb +2 -2
- data/spec/shoryuken/body_parser_spec.rb +2 -2
- data/spec/shoryuken/client_spec.rb +1 -1
- data/spec/shoryuken/core_ext_spec.rb +6 -6
- data/spec/shoryuken/default_worker_registry_spec.rb +2 -4
- data/spec/shoryuken/environment_loader_spec.rb +4 -4
- data/spec/shoryuken/extensions/active_job_adapter_spec.rb +3 -3
- data/spec/shoryuken/manager_spec.rb +1 -1
- data/spec/shoryuken/middleware/chain_spec.rb +2 -2
- data/spec/shoryuken/middleware/server/auto_delete_spec.rb +9 -7
- data/spec/shoryuken/middleware/server/auto_extend_visibility_spec.rb +3 -3
- data/spec/shoryuken/middleware/server/exponential_backoff_retry_spec.rb +5 -3
- data/spec/shoryuken/options_spec.rb +5 -5
- data/spec/shoryuken/polling/strict_priority_spec.rb +1 -1
- data/spec/shoryuken/polling/weighted_round_robin_spec.rb +1 -1
- data/spec/shoryuken/processor_spec.rb +1 -1
- data/spec/shoryuken/queue_spec.rb +3 -3
- data/spec/shoryuken/util_spec.rb +1 -1
- data/spec/shoryuken/worker/default_executor_spec.rb +10 -5
- data/spec/shoryuken/worker/inline_executor_spec.rb +28 -2
- data/spec/shoryuken/worker_spec.rb +7 -9
- data/spec/spec_helper.rb +1 -1
- data/test_workers/endless_interruptive_worker.rb +2 -2
- data/test_workers/endless_uninterruptive_worker.rb +3 -3
- metadata +7 -7
data/lib/shoryuken/queue.rb
CHANGED
@@ -2,9 +2,9 @@ module Shoryuken
|
|
2
2
|
class Queue
|
3
3
|
include Util
|
4
4
|
|
5
|
-
FIFO_ATTR = 'FifoQueue'
|
6
|
-
MESSAGE_GROUP_ID = 'ShoryukenMessage'
|
7
|
-
VISIBILITY_TIMEOUT_ATTR = 'VisibilityTimeout'
|
5
|
+
FIFO_ATTR = 'FifoQueue'.freeze
|
6
|
+
MESSAGE_GROUP_ID = 'ShoryukenMessage'.freeze
|
7
|
+
VISIBILITY_TIMEOUT_ATTR = 'VisibilityTimeout'.freeze
|
8
8
|
|
9
9
|
attr_accessor :name, :client, :url
|
10
10
|
|
data/lib/shoryuken/runner.rb
CHANGED
@@ -8,7 +8,6 @@ require 'shoryuken'
|
|
8
8
|
|
9
9
|
module Shoryuken
|
10
10
|
# rubocop:disable Lint/InheritException
|
11
|
-
# rubocop:disable Metrics/AbcSize
|
12
11
|
# See: https://github.com/mperham/sidekiq/blob/33f5d6b2b6c0dfaab11e5d39688cab7ebadc83ae/lib/sidekiq/cli.rb#L20
|
13
12
|
class Shutdown < Interrupt; end
|
14
13
|
|
@@ -19,7 +18,7 @@ module Shoryuken
|
|
19
18
|
def run(options)
|
20
19
|
self_read, self_write = IO.pipe
|
21
20
|
|
22
|
-
%w
|
21
|
+
%w[INT TERM USR1 TSTP TTIN].each do |sig|
|
23
22
|
begin
|
24
23
|
trap sig do
|
25
24
|
self_write.puts(sig)
|
@@ -106,6 +105,12 @@ module Shoryuken
|
|
106
105
|
exit 0
|
107
106
|
end
|
108
107
|
|
108
|
+
def execute_terminal_stop
|
109
|
+
logger.info { 'Received TSTP, will stop accepting new work' }
|
110
|
+
|
111
|
+
@launcher.stop
|
112
|
+
end
|
113
|
+
|
109
114
|
def print_threads_backtrace
|
110
115
|
Thread.list.each do |thread|
|
111
116
|
logger.info { "Thread TID-#{thread.object_id.to_s(36)} #{thread['label']}" }
|
@@ -123,8 +128,9 @@ module Shoryuken
|
|
123
128
|
case sig
|
124
129
|
when 'USR1' then execute_soft_shutdown
|
125
130
|
when 'TTIN' then print_threads_backtrace
|
131
|
+
when 'TSTP' then execute_terminal_stop
|
126
132
|
when 'TERM', 'INT'
|
127
|
-
logger.info { "Received #{sig}, will shutdown
|
133
|
+
logger.info { "Received #{sig}, will shutdown" }
|
128
134
|
|
129
135
|
raise Interrupt
|
130
136
|
end
|
data/lib/shoryuken/version.rb
CHANGED
@@ -2,7 +2,7 @@ module Shoryuken
|
|
2
2
|
module Worker
|
3
3
|
class InlineExecutor
|
4
4
|
class << self
|
5
|
-
def perform_async(worker_class, body,
|
5
|
+
def perform_async(worker_class, body, _options = {})
|
6
6
|
body = JSON.dump(body) if body.is_a?(Hash)
|
7
7
|
|
8
8
|
sqs_msg = OpenStruct.new(
|
@@ -16,11 +16,20 @@ module Shoryuken
|
|
16
16
|
delete: nil
|
17
17
|
)
|
18
18
|
|
19
|
-
|
19
|
+
call(worker_class, sqs_msg)
|
20
20
|
end
|
21
21
|
|
22
22
|
def perform_in(worker_class, _interval, body, options = {})
|
23
|
-
perform_async(
|
23
|
+
worker_class.perform_async(body, options)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def call(worker_class, sqs_msg)
|
29
|
+
parsed_body = BodyParser.parse(worker_class, sqs_msg)
|
30
|
+
batch = worker_class.shoryuken_options_hash['batch']
|
31
|
+
args = batch ? [[sqs_msg], [parsed_body]] : [sqs_msg, parsed_body]
|
32
|
+
worker_class.new.perform(*args)
|
24
33
|
end
|
25
34
|
end
|
26
35
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Shoryuken
|
2
2
|
class WorkerRegistry
|
3
|
-
def batch_receive_messages?(
|
3
|
+
def batch_receive_messages?(_queue)
|
4
4
|
# true if the workers for queue support batch processing of messages
|
5
5
|
fail NotImplementedError
|
6
6
|
end
|
@@ -10,7 +10,7 @@ module Shoryuken
|
|
10
10
|
fail NotImplementedError
|
11
11
|
end
|
12
12
|
|
13
|
-
def fetch_worker(
|
13
|
+
def fetch_worker(_queue, _message)
|
14
14
|
# must return an instance of the worker that handles
|
15
15
|
# message received on queue
|
16
16
|
fail NotImplementedError
|
@@ -21,12 +21,12 @@ module Shoryuken
|
|
21
21
|
fail NotImplementedError
|
22
22
|
end
|
23
23
|
|
24
|
-
def register_worker(
|
24
|
+
def register_worker(_queue, _clazz)
|
25
25
|
# must register the worker as a consumer of messages from queue
|
26
26
|
fail NotImplementedError
|
27
27
|
end
|
28
28
|
|
29
|
-
def workers(
|
29
|
+
def workers(_queue)
|
30
30
|
# must return the list of workers registered for queue, or []
|
31
31
|
fail NotImplementedError
|
32
32
|
end
|
data/shoryuken.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('
|
1
|
+
|
2
|
+
lib = File.expand_path('lib', __dir__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
require 'shoryuken/version'
|
5
5
|
|
@@ -13,15 +13,15 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.license = 'LGPL-3.0'
|
14
14
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
16
|
-
spec.executables = %w
|
16
|
+
spec.executables = %w[shoryuken]
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
20
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
21
|
+
spec.add_development_dependency 'dotenv'
|
22
|
+
spec.add_development_dependency 'pry-byebug'
|
21
23
|
spec.add_development_dependency 'rake'
|
22
24
|
spec.add_development_dependency 'rspec'
|
23
|
-
spec.add_development_dependency 'pry-byebug'
|
24
|
-
spec.add_development_dependency 'dotenv'
|
25
25
|
|
26
26
|
spec.add_dependency 'aws-sdk-core', '>= 2'
|
27
27
|
spec.add_dependency 'concurrent-ruby'
|
@@ -4,7 +4,7 @@ require 'shoryuken/launcher'
|
|
4
4
|
require 'securerandom'
|
5
5
|
|
6
6
|
RSpec.describe Shoryuken::Launcher do
|
7
|
-
describe 'Consuming messages', slow:
|
7
|
+
describe 'Consuming messages', slow: true do
|
8
8
|
before do
|
9
9
|
Aws.config[:stub_responses] = false
|
10
10
|
Aws.config[:region] = 'us-east-1'
|
@@ -85,7 +85,7 @@ RSpec.describe Shoryuken::Launcher do
|
|
85
85
|
|
86
86
|
shoryuken_options auto_delete: true
|
87
87
|
|
88
|
-
def perform(sqs_msg,
|
88
|
+
def perform(sqs_msg, _body)
|
89
89
|
@@received_messages += Array(sqs_msg).size
|
90
90
|
end
|
91
91
|
|
@@ -69,8 +69,8 @@ RSpec.describe Shoryuken::BodyParser do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
specify do
|
72
|
-
expect { described_class.parse(TestWorker, sqs_msg) }
|
73
|
-
to raise_error(JSON::ParserError, /unexpected token at 'invalid JSON'/)
|
72
|
+
expect { described_class.parse(TestWorker, sqs_msg) }
|
73
|
+
.to raise_error(JSON::ParserError, /unexpected token at 'invalid JSON'/)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -12,7 +12,7 @@ RSpec.describe Shoryuken::Client do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'memoizes queues' do
|
15
|
-
sqs.stub_responses(:get_queue_url, { queue_url: queue_url },
|
15
|
+
sqs.stub_responses(:get_queue_url, { queue_url: queue_url }, queue_url: 'xyz')
|
16
16
|
|
17
17
|
expect(Shoryuken::Client.queues(queue_name).url).to eq queue_url
|
18
18
|
expect(Shoryuken::Client.queues(queue_name).url).to eq queue_url
|
@@ -10,7 +10,7 @@ RSpec.describe 'Core Extensions' do
|
|
10
10
|
|
11
11
|
describe '#symbolize_keys' do
|
12
12
|
it 'converts keys into symbols' do
|
13
|
-
expect({ :key1 => 'value1', 'key2' => 'value2' }.symbolize_keys).to eq(:
|
13
|
+
expect({ :key1 => 'value1', 'key2' => 'value2' }.symbolize_keys).to eq(key1: 'value1', key2: 'value2')
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -20,11 +20,11 @@ RSpec.describe 'Core Extensions' do
|
|
20
20
|
'key2' => 'value2',
|
21
21
|
'key3' => {
|
22
22
|
'key31' => { 'key311' => 'value311' },
|
23
|
-
'key32' => 'value32'
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
'key32' => 'value32'
|
24
|
+
} }.deep_symbolize_keys).to eq(key1: 'value1',
|
25
|
+
key2: 'value2',
|
26
|
+
key3: { key31: { key311: 'value311' },
|
27
|
+
key32: 'value32' })
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -43,12 +43,10 @@ RSpec.describe Shoryuken::DefaultWorkerRegistry do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
describe 'a registry with workers is handling messages' do
|
46
|
-
def build_message(
|
46
|
+
def build_message(_queue, explicit_worker = nil)
|
47
47
|
attributes = {}
|
48
48
|
|
49
|
-
if explicit_worker
|
50
|
-
attributes['shoryuken_class'] = { string_value: explicit_worker.to_s, data_type: 'String' }
|
51
|
-
end
|
49
|
+
attributes['shoryuken_class'] = { string_value: explicit_worker.to_s, data_type: 'String' } if explicit_worker
|
52
50
|
|
53
51
|
double(Shoryuken::Message,
|
54
52
|
body: 'test',
|
@@ -18,7 +18,7 @@ RSpec.describe Shoryuken::EnvironmentLoader do
|
|
18
18
|
Shoryuken.options[:queues] = ['queue1', ['queue2', 2]]
|
19
19
|
subject.load
|
20
20
|
|
21
|
-
expect(Shoryuken.groups['default'][:queues]).to eq(%w
|
21
|
+
expect(Shoryuken.groups['default'][:queues]).to eq(%w[queue1 queue2 queue2])
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -42,13 +42,13 @@ RSpec.describe Shoryuken::EnvironmentLoader do
|
|
42
42
|
Shoryuken.options[:queues] = ['queue1', ['queue2', 2]]
|
43
43
|
|
44
44
|
Shoryuken.options[:groups] = {
|
45
|
-
'group1' => { queues: %w
|
45
|
+
'group1' => { queues: %w[group1_queue1 group1_queue2] }
|
46
46
|
}
|
47
47
|
|
48
48
|
subject.load
|
49
49
|
|
50
|
-
expect(Shoryuken.groups['default'][:queues]).to eq(%w
|
51
|
-
expect(Shoryuken.groups['group1'][:queues]).to eq(%w
|
50
|
+
expect(Shoryuken.groups['default'][:queues]).to eq(%w[test_queue1 test_queue2 test_queue2])
|
51
|
+
expect(Shoryuken.groups['group1'][:queues]).to eq(%w[test_group1_queue1 test_group1_queue2])
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -9,13 +9,13 @@ RSpec.describe ActiveJob::QueueAdapters::ShoryukenAdapter do
|
|
9
9
|
|
10
10
|
before do
|
11
11
|
allow(Shoryuken::Client).to receive(:queues).with(job.queue_name).and_return(queue)
|
12
|
-
allow(job).to receive(:serialize).and_return(
|
13
|
-
'job_class'
|
12
|
+
allow(job).to receive(:serialize).and_return(
|
13
|
+
'job_class' => 'Worker',
|
14
14
|
'job_id' => job.id,
|
15
15
|
'queue_name' => job.queue_name,
|
16
16
|
'arguments' => nil,
|
17
17
|
'locale' => nil
|
18
|
-
|
18
|
+
)
|
19
19
|
end
|
20
20
|
|
21
21
|
describe '#enqueue' do
|
@@ -79,7 +79,7 @@ RSpec.describe Shoryuken::Manager do
|
|
79
79
|
|
80
80
|
context 'when batch' do
|
81
81
|
specify do
|
82
|
-
messages = %w
|
82
|
+
messages = %w[test1 test2 test3]
|
83
83
|
q = Shoryuken::Polling::QueueConfiguration.new(queue, {})
|
84
84
|
|
85
85
|
expect(fetcher).to receive(:fetch).with(q, described_class::BATCH_LIMIT).and_return(messages)
|
@@ -7,7 +7,7 @@ RSpec.describe Shoryuken::Middleware::Chain do
|
|
7
7
|
@recorder = recorder
|
8
8
|
end
|
9
9
|
|
10
|
-
def call(*
|
10
|
+
def call(*_args)
|
11
11
|
@recorder << [@name, 'before']
|
12
12
|
yield
|
13
13
|
@recorder << [@name, 'after']
|
@@ -39,7 +39,7 @@ RSpec.describe Shoryuken::Middleware::Chain do
|
|
39
39
|
final_action = nil
|
40
40
|
subject.invoke { final_action = true }
|
41
41
|
expect(final_action).to eq true
|
42
|
-
expect(recorder).to eq [%w
|
42
|
+
expect(recorder).to eq [%w[custom before], %w[custom after]]
|
43
43
|
end
|
44
44
|
|
45
45
|
class NonYieldingMiddleware
|
@@ -6,9 +6,9 @@ describe Shoryuken::Middleware::Server::AutoDelete do
|
|
6
6
|
|
7
7
|
def build_message
|
8
8
|
double Shoryuken::Message,
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
queue_url: queue,
|
10
|
+
body: 'test',
|
11
|
+
receipt_handle: SecureRandom.uuid
|
12
12
|
end
|
13
13
|
|
14
14
|
let(:sqs_msg) { build_message }
|
@@ -21,7 +21,8 @@ describe Shoryuken::Middleware::Server::AutoDelete do
|
|
21
21
|
TestWorker.get_shoryuken_options['auto_delete'] = true
|
22
22
|
|
23
23
|
expect(sqs_queue).to receive(:delete_messages).with(entries: [
|
24
|
-
|
24
|
+
{ id: '0', receipt_handle: sqs_msg.receipt_handle }
|
25
|
+
])
|
25
26
|
|
26
27
|
subject.call(TestWorker.new, queue, sqs_msg, sqs_msg.body) {}
|
27
28
|
end
|
@@ -35,9 +36,10 @@ describe Shoryuken::Middleware::Server::AutoDelete do
|
|
35
36
|
sqs_msgs = [sqs_msg, sqs_msg2, sqs_msg3]
|
36
37
|
|
37
38
|
expect(sqs_queue).to receive(:delete_messages).with(entries: [
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
{ id: '0', receipt_handle: sqs_msg.receipt_handle },
|
40
|
+
{ id: '1', receipt_handle: sqs_msg2.receipt_handle },
|
41
|
+
{ id: '2', receipt_handle: sqs_msg3.receipt_handle }
|
42
|
+
])
|
41
43
|
|
42
44
|
subject.call(TestWorker.new, queue, sqs_msgs, [sqs_msg.body, sqs_msg2.body, sqs_msg3.body]) {}
|
43
45
|
end
|
@@ -18,9 +18,9 @@ RSpec.describe Shoryuken::Middleware::Server::AutoExtendVisibility do
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def run_and_raise(worker, queue, sqs_msg
|
21
|
+
def run_and_raise(worker, queue, sqs_msg)
|
22
22
|
Shoryuken::Middleware::Server::AutoExtendVisibility.new.call(worker, queue, sqs_msg, sqs_msg.body) do
|
23
|
-
raise
|
23
|
+
raise
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -53,7 +53,7 @@ RSpec.describe Shoryuken::Middleware::Server::AutoExtendVisibility do
|
|
53
53
|
allow(sqs_msg).to receive(:queue) { sqs_queue }
|
54
54
|
expect(sqs_msg).to_not receive(:change_visibility)
|
55
55
|
|
56
|
-
expect { Runner.new.run_and_raise(TestWorker.new, queue, sqs_msg
|
56
|
+
expect { Runner.new.run_and_raise(TestWorker.new, queue, sqs_msg) }.to raise_error
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'does not extend message visibility if auto_visibility_timeout is not true' do
|
@@ -1,11 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
# rubocop:disable
|
3
|
+
# rubocop:disable /BlockLength, Metrics/
|
4
4
|
RSpec.describe Shoryuken::Middleware::Server::ExponentialBackoffRetry do
|
5
5
|
let(:queue) { 'default' }
|
6
6
|
let(:sqs_queue) { double Shoryuken::Queue }
|
7
|
-
let(:sqs_msg) {
|
8
|
-
|
7
|
+
let(:sqs_msg) {
|
8
|
+
double Shoryuken::Message, queue_url: queue, body: 'test', receipt_handle: SecureRandom.uuid,
|
9
|
+
attributes: { 'ApproximateReceiveCount' => 1 }, message_id: SecureRandom.uuid
|
10
|
+
}
|
9
11
|
|
10
12
|
before do
|
11
13
|
allow(Shoryuken::Client).to receive(:queues).with(queue).and_return(sqs_queue)
|
@@ -12,8 +12,8 @@ RSpec.describe Shoryuken::Options do
|
|
12
12
|
described_class.add_queue('queue1', 1, 'group1')
|
13
13
|
described_class.add_queue('queue2', 2, 'group2')
|
14
14
|
|
15
|
-
expect(described_class.groups['group1'][:queues]).to eq(%w
|
16
|
-
expect(described_class.groups['group2'][:queues]).to eq(%w
|
15
|
+
expect(described_class.groups['group1'][:queues]).to eq(%w[queue1])
|
16
|
+
expect(described_class.groups['group2'][:queues]).to eq(%w[queue2 queue2])
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -28,7 +28,7 @@ RSpec.describe Shoryuken::Options do
|
|
28
28
|
described_class.add_queue('queue1', 1, 'group1')
|
29
29
|
described_class.add_queue('queue2', 2, 'group2')
|
30
30
|
|
31
|
-
expect(described_class.ungrouped_queues).to eq(%w
|
31
|
+
expect(described_class.ungrouped_queues).to eq(%w[queue1 queue2 queue2])
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -45,7 +45,7 @@ RSpec.describe Shoryuken::Options do
|
|
45
45
|
|
46
46
|
expect(Shoryuken.sqs_client_receive_message_opts).to eq(
|
47
47
|
'default' => { test: 1 },
|
48
|
-
'group1' => { test: 2 }
|
48
|
+
'group1' => { test: 2 }
|
49
49
|
)
|
50
50
|
end
|
51
51
|
end
|
@@ -93,7 +93,7 @@ RSpec.describe Shoryuken::Options do
|
|
93
93
|
|
94
94
|
def perform(sqs_msg, body); end
|
95
95
|
end
|
96
|
-
}.to raise_error(
|
96
|
+
}.to raise_error('Could not register BatchableWorker for default, because TestWorker is already registered for this queue, ' \
|
97
97
|
"and Shoryuken doesn't support a batchable worker for a queue with multiple workers")
|
98
98
|
end
|
99
99
|
end
|
@@ -4,7 +4,7 @@ RSpec.describe Shoryuken::Polling::StrictPriority do
|
|
4
4
|
let(:queue1) { 'shoryuken' }
|
5
5
|
let(:queue2) { 'uppercut' }
|
6
6
|
let(:queue3) { 'other' }
|
7
|
-
let(:queues) {
|
7
|
+
let(:queues) { [] }
|
8
8
|
subject { Shoryuken::Polling::StrictPriority.new(queues) }
|
9
9
|
|
10
10
|
describe '#next_queue' do
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
RSpec.describe Shoryuken::Polling::WeightedRoundRobin do
|
4
4
|
let(:queue1) { 'shoryuken' }
|
5
5
|
let(:queue2) { 'uppercut' }
|
6
|
-
let(:queues) {
|
6
|
+
let(:queues) { [] }
|
7
7
|
subject { Shoryuken::Polling::WeightedRoundRobin.new(queues) }
|
8
8
|
|
9
9
|
describe '#next_queue' do
|
@@ -38,7 +38,7 @@ RSpec.describe Shoryuken::Processor do
|
|
38
38
|
let(:queue) { 'worker_called_middleware' }
|
39
39
|
|
40
40
|
class WorkerCalledMiddleware
|
41
|
-
def call(worker, queue, sqs_msg,
|
41
|
+
def call(worker, queue, sqs_msg, _body)
|
42
42
|
# called is defined with `allow(...).to receive(...)`
|
43
43
|
worker.called(sqs_msg, queue)
|
44
44
|
yield
|