class RackRabbit::Worker
Attributes
config[R]
handler[R]
lock[R]
logger[R]
rabbit[R]
signals[R]
subscriber[R]
Public Class Methods
new(config, app)
click to toggle source
# File lib/rack-rabbit/worker.rb, line 21 def initialize(config, app) @config = config @logger = config.logger @signals = Signals.new @lock = Mutex.new @rabbit = Adapter.load(config.rabbit) @handler = Handler.new(app, config) @subscriber = Subscriber.new(rabbit, handler, lock, config) end
Public Instance Methods
run()
click to toggle source
# File lib/rack-rabbit/worker.rb, line 33 def run logger.info "STARTED a new worker with PID #{Process.pid}" trap_signals subscriber.subscribe while true sig = signals.pop # BLOCKS until there is a signal case sig when :INT then shutdown(:INT) when :QUIT then shutdown(:QUIT) when :TERM then shutdown(:TERM) else raise RuntimeError, "unknown signal #{sig}" end end ensure subscriber.unsubscribe end
shutdown(sig)
click to toggle source
# File lib/rack-rabbit/worker.rb, line 59 def shutdown(sig) lock.lock if sig == :QUIT # graceful shutdown should wait for any pending message handler to finish logger.info "#{RackRabbit.friendly_signal(sig)} worker #{Process.pid}" exit end
trap_signals()
click to toggle source
# File lib/rack-rabbit/worker.rb, line 67 def trap_signals # overwrite the handlers inherited from the server process [:QUIT, :TERM, :INT].each do |sig| trap(sig) do signals.push(sig) end end trap(:CHLD, :DEFAULT) trap(:TTIN, nil) trap(:TTOU, nil) end