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
|
2.16.0
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
- Refactor Sidekiq::Client to be instance-based [#1279]
|
||||||
- Pass all Redis options to the Redis driver so Unix sockets
|
- Pass all Redis options to the Redis driver so Unix sockets
|
||||||
can be fully configured. [#1270, salimane]
|
can be fully configured. [#1270, salimane]
|
||||||
- Allow sidekiq-web extensions to add locale paths so extensions
|
- Allow sidekiq-web extensions to add locale paths so extensions
|
||||||
|
|
|
@ -77,8 +77,8 @@ module Sidekiq
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.client_middleware
|
def self.client_middleware(&block)
|
||||||
@client_chain ||= Client.default_middleware
|
@client_chain ||= Middleware::Chain.new
|
||||||
yield @client_chain if block_given?
|
yield @client_chain if block_given?
|
||||||
@client_chain
|
@client_chain
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,19 +4,26 @@ require 'sidekiq/middleware/chain'
|
||||||
|
|
||||||
module Sidekiq
|
module Sidekiq
|
||||||
class Client
|
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
|
||||||
end
|
@chain
|
||||||
|
|
||||||
def registered_workers
|
|
||||||
Sidekiq.redis { |x| x.smembers('workers') }
|
|
||||||
end
|
|
||||||
|
|
||||||
def registered_queues
|
|
||||||
Sidekiq.redis { |x| x.smembers('queues') }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -70,6 +77,31 @@ module Sidekiq
|
||||||
pushed ? payloads.size : nil
|
pushed ? payloads.size : nil
|
||||||
end
|
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
|
# Resque compatibility helpers. Note all helpers
|
||||||
# should go through Worker#client_push.
|
# should go through Worker#client_push.
|
||||||
#
|
#
|
||||||
|
@ -109,6 +141,7 @@ module Sidekiq
|
||||||
def enqueue_in(interval, klass, *args)
|
def enqueue_in(interval, klass, *args)
|
||||||
klass.perform_in(interval, *args)
|
klass.perform_in(interval, *args)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
@ -135,7 +168,7 @@ module Sidekiq
|
||||||
def process_single(worker_class, item)
|
def process_single(worker_class, item)
|
||||||
queue = item['queue']
|
queue = item['queue']
|
||||||
|
|
||||||
Sidekiq.client_middleware.invoke(worker_class, item, queue) do
|
middleware.invoke(worker_class, item, queue) do
|
||||||
item
|
item
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -161,4 +194,3 @@ module Sidekiq
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
|
@ -54,7 +54,6 @@ module Sidekiq
|
||||||
class EmptyQueueError < RuntimeError; end
|
class EmptyQueueError < RuntimeError; end
|
||||||
|
|
||||||
class Client
|
class Client
|
||||||
class << self
|
|
||||||
alias_method :raw_push_real, :raw_push
|
alias_method :raw_push_real, :raw_push
|
||||||
|
|
||||||
def raw_push(payloads)
|
def raw_push(payloads)
|
||||||
|
@ -74,7 +73,6 @@ module Sidekiq
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
module Worker
|
module Worker
|
||||||
##
|
##
|
||||||
|
|
|
@ -201,11 +201,11 @@ class TestClient < Sidekiq::Test
|
||||||
|
|
||||||
describe 'item normalization' do
|
describe 'item normalization' do
|
||||||
it 'defaults retry to true' 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
|
end
|
||||||
|
|
||||||
it "does not normalize numeric retry's" do
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue