mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
Rejigger Sidekiq::Client to be instance-based, #1279
This commit is contained in:
parent
3ef6309b0d
commit
b76ac9464c
5 changed files with 145 additions and 114 deletions
|
@ -1,6 +1,7 @@
|
|||
2.16.0
|
||||
-----------
|
||||
|
||||
- Refactor Sidekiq::Client to be instance-based [#1279]
|
||||
- Pass all Redis options to the Redis driver so Unix sockets
|
||||
can be fully configured. [#1270, salimane]
|
||||
- Allow sidekiq-web extensions to add locale paths so extensions
|
||||
|
|
|
@ -77,8 +77,8 @@ module Sidekiq
|
|||
end
|
||||
end
|
||||
|
||||
def self.client_middleware
|
||||
@client_chain ||= Client.default_middleware
|
||||
def self.client_middleware(&block)
|
||||
@client_chain ||= Middleware::Chain.new
|
||||
yield @client_chain if block_given?
|
||||
@client_chain
|
||||
end
|
||||
|
|
|
@ -4,19 +4,26 @@ require 'sidekiq/middleware/chain'
|
|||
|
||||
module Sidekiq
|
||||
class Client
|
||||
class << self
|
||||
|
||||
def default_middleware
|
||||
Middleware::Chain.new do
|
||||
##
|
||||
# Define client-side middleware:
|
||||
#
|
||||
# client = Sidekiq::Client.new
|
||||
# client.middleware do |chain|
|
||||
# chain.use MyClientMiddleware
|
||||
# end
|
||||
# client.push('class' => 'SomeWorker', 'args' => [1,2,3])
|
||||
#
|
||||
# All client instances default to the globally-defined
|
||||
# Sidekiq.client_middleware but you can change as necessary.
|
||||
#
|
||||
def middleware(&block)
|
||||
@chain ||= Sidekiq.client_middleware
|
||||
if block_given?
|
||||
@chain = @chain.dup
|
||||
yield @chain
|
||||
end
|
||||
end
|
||||
|
||||
def registered_workers
|
||||
Sidekiq.redis { |x| x.smembers('workers') }
|
||||
end
|
||||
|
||||
def registered_queues
|
||||
Sidekiq.redis { |x| x.smembers('queues') }
|
||||
@chain
|
||||
end
|
||||
|
||||
##
|
||||
|
@ -70,6 +77,31 @@ module Sidekiq
|
|||
pushed ? payloads.size : nil
|
||||
end
|
||||
|
||||
class << self
|
||||
def default
|
||||
@default ||= new
|
||||
end
|
||||
|
||||
# deprecated
|
||||
def registered_workers
|
||||
puts "Deprecated, please use Sidekiq::Workers.new"
|
||||
Sidekiq.redis { |x| x.smembers('workers') }
|
||||
end
|
||||
|
||||
# deprecated
|
||||
def registered_queues
|
||||
puts "Deprecated, please use Sidekiq::Queue.all"
|
||||
Sidekiq.redis { |x| x.smembers('queues') }
|
||||
end
|
||||
|
||||
def push(item)
|
||||
default.push(item)
|
||||
end
|
||||
|
||||
def push_bulk(items)
|
||||
default.push_bulk(items)
|
||||
end
|
||||
|
||||
# Resque compatibility helpers. Note all helpers
|
||||
# should go through Worker#client_push.
|
||||
#
|
||||
|
@ -109,6 +141,7 @@ module Sidekiq
|
|||
def enqueue_in(interval, klass, *args)
|
||||
klass.perform_in(interval, *args)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
@ -135,7 +168,7 @@ module Sidekiq
|
|||
def process_single(worker_class, item)
|
||||
queue = item['queue']
|
||||
|
||||
Sidekiq.client_middleware.invoke(worker_class, item, queue) do
|
||||
middleware.invoke(worker_class, item, queue) do
|
||||
item
|
||||
end
|
||||
end
|
||||
|
@ -160,5 +193,4 @@ module Sidekiq
|
|||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -54,7 +54,6 @@ module Sidekiq
|
|||
class EmptyQueueError < RuntimeError; end
|
||||
|
||||
class Client
|
||||
class << self
|
||||
alias_method :raw_push_real, :raw_push
|
||||
|
||||
def raw_push(payloads)
|
||||
|
@ -74,7 +73,6 @@ module Sidekiq
|
|||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module Worker
|
||||
##
|
||||
|
|
|
@ -201,11 +201,11 @@ class TestClient < Sidekiq::Test
|
|||
|
||||
describe 'item normalization' do
|
||||
it 'defaults retry to true' do
|
||||
assert_equal true, Sidekiq::Client.send(:normalize_item, 'class' => QueuedWorker, 'args' => [])['retry']
|
||||
assert_equal true, Sidekiq::Client.new.send(:normalize_item, 'class' => QueuedWorker, 'args' => [])['retry']
|
||||
end
|
||||
|
||||
it "does not normalize numeric retry's" do
|
||||
assert_equal 2, Sidekiq::Client.send(:normalize_item, 'class' => CWorker, 'args' => [])['retry']
|
||||
assert_equal 2, Sidekiq::Client.new.send(:normalize_item, 'class' => CWorker, 'args' => [])['retry']
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue