1
0
Fork 0
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:
Mike Perham 2013-10-23 21:47:57 -07:00
parent 3ef6309b0d
commit b76ac9464c
5 changed files with 145 additions and 114 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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
##

View file

@ -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