class Shoryuken::DefaultWorkerRegistry

Public Class Methods

new() click to toggle source
# File lib/shoryuken/default_worker_registry.rb, line 3
def initialize
  @workers = Concurrent::Hash.new
end

Public Instance Methods

batch_receive_messages?(queue) click to toggle source
# File lib/shoryuken/default_worker_registry.rb, line 7
def batch_receive_messages?(queue)
  !!(@workers[queue] && @workers[queue].get_shoryuken_options['batch'])
end
clear() click to toggle source
# File lib/shoryuken/default_worker_registry.rb, line 11
def clear
  @workers.clear
end
fetch_worker(queue, message) click to toggle source
# File lib/shoryuken/default_worker_registry.rb, line 15
def fetch_worker(queue, message)
  worker_class = !message.is_a?(Array) &&
                 message.message_attributes &&
                 message.message_attributes['shoryuken_class'] &&
                 message.message_attributes['shoryuken_class'][:string_value]

  worker_class = begin
                   worker_class.constantize
                 rescue
                   @workers[queue]
                 end

  worker_class.new if worker_class
end
queues() click to toggle source
# File lib/shoryuken/default_worker_registry.rb, line 30
def queues
  @workers.keys
end
register_worker(queue, clazz) click to toggle source
# File lib/shoryuken/default_worker_registry.rb, line 34
def register_worker(queue, clazz)
  if (worker_class = @workers[queue])
    if worker_class.get_shoryuken_options['batch'] == true || clazz.get_shoryuken_options['batch'] == true
      fail ArgumentError, "Could not register #{clazz} for #{queue}, "\
        "because #{worker_class} is already registered for this queue, "\
        "and Shoryuken doesn't support a batchable worker for a queue with multiple workers"
    end
  end

  @workers[queue] = clazz
end
workers(queue) click to toggle source
# File lib/shoryuken/default_worker_registry.rb, line 46
def workers(queue)
  [@workers.fetch(queue, [])].flatten
end