shoryuken 3.2.3 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|