Class: Shoryuken::DefaultWorkerRegistry

Inherits:
WorkerRegistry show all
Defined in:
lib/shoryuken/default_worker_registry.rb

Instance Method Summary collapse

Constructor Details

#initializeDefaultWorkerRegistry

Returns a new instance of DefaultWorkerRegistry.



5
6
7
# File 'lib/shoryuken/default_worker_registry.rb', line 5

def initialize
  @workers = Shoryuken::Helpers::AtomicHash.new
end

Instance Method Details

#batch_receive_messages?(queue) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
# File 'lib/shoryuken/default_worker_registry.rb', line 9

def batch_receive_messages?(queue)
  !!(@workers[queue] && @workers[queue].get_shoryuken_options['batch'])
end

#clearObject



13
14
15
# File 'lib/shoryuken/default_worker_registry.rb', line 13

def clear
  @workers.clear
end

#fetch_worker(queue, message) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/shoryuken/default_worker_registry.rb', line 17

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
    Shoryuken::Helpers::StringUtils.constantize(worker_class)
  rescue
    @workers[queue]
  end

  worker_class.new if worker_class
end

#queuesObject



32
33
34
# File 'lib/shoryuken/default_worker_registry.rb', line 32

def queues
  @workers.keys
end

#register_worker(queue, clazz) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/shoryuken/default_worker_registry.rb', line 36

def register_worker(queue, clazz)
  if (worker_class = @workers[queue]) && (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

  @workers[queue] = clazz
end

#workers(queue) ⇒ Object



46
47
48
# File 'lib/shoryuken/default_worker_registry.rb', line 46

def workers(queue)
  [@workers.fetch(queue, [])].flatten
end