Class: Sidekiq::Processor
- Inherits:
-
Object
- Object
- Sidekiq::Processor
- Defined in:
- lib/sidekiq/processor.rb
Overview
The Processor receives a message from the Manager and actually processes it. It instantiates the worker, runs the middleware chain and then calls Sidekiq::Worker#perform.
Constant Summary collapse
- STATS_TIMEOUT =
To prevent a memory leak, ensure that stats expire. However, they should take up a minimal amount of storage so keep them around for a long time
24 * 60 * 60 * 365 * 5
Constants included from Util
Instance Attribute Summary collapse
-
#proxy_id ⇒ Object
Returns the value of attribute proxy_id.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(boss) ⇒ Processor
constructor
A new instance of Processor.
- #inspect ⇒ Object
- #process(work) ⇒ Object
Methods included from Actor
Methods included from Util
#hostname, #identity, #logger, #redis, #watchdog
Methods included from ExceptionHandler
Constructor Details
#initialize(boss) ⇒ Processor
Returns a new instance of Processor.
33 34 35 |
# File 'lib/sidekiq/processor.rb', line 33 def initialize(boss) @boss = boss end |
Instance Attribute Details
#proxy_id ⇒ Object
Returns the value of attribute proxy_id.
31 32 33 |
# File 'lib/sidekiq/processor.rb', line 31 def proxy_id @proxy_id end |
Class Method Details
.default_middleware ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/sidekiq/processor.rb', line 20 def self.default_middleware Middleware::Chain.new do |m| m.add Middleware::Server::Logging m.add Middleware::Server::RetryJobs if defined?(::ActiveRecord::Base) require 'sidekiq/middleware/server/active_record' m.add Sidekiq::Middleware::Server::ActiveRecord end end end |
Instance Method Details
#inspect ⇒ Object
70 71 72 |
# File 'lib/sidekiq/processor.rb', line 70 def inspect "<Processor##{object_id.to_s(16)}>" end |
#process(work) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/sidekiq/processor.rb', line 37 def process(work) msgstr = work. queue = work.queue_name @boss.async.real_thread(proxy_id, Thread.current) ack = true begin msg = Sidekiq.load_json(msgstr) klass = msg['class'].constantize worker = klass.new worker.jid = msg['jid'] stats(worker, msg, queue) do Sidekiq.server_middleware.invoke(worker, msg, queue) do worker.perform(*cloned(msg['args'])) end end rescue Sidekiq::Shutdown # Had to force kill this job because it didn't finish # within the timeout. Don't acknowledge the work since # we didn't properly finish it. ack = false rescue Exception => ex handle_exception(ex, msg || { :message => msgstr }) raise ensure work.acknowledge if ack end @boss.async.processor_done(current_actor) end |