class Totoro::BaseWorker

Public Class Methods

new() click to toggle source
# File lib/totoro/base_worker.rb, line 16
def initialize
  setup
end
setup(attrs) click to toggle source
# File lib/totoro/base_worker.rb, line 5
def self.setup(attrs)
  prefix = attrs[:prefix]
  queue_name = attrs[:queue_name]
  define_method('setup') do
    raise(Totoro::NeedQueueNameError) if queue_name.nil?

    @prefix = prefix
    @queue_name = queue_name
  end
end

Public Instance Methods

execute() click to toggle source
# File lib/totoro/base_worker.rb, line 20
def execute
  Rails.logger.info 'Listening to the Rabbitmq'
  STDOUT.flush
  subscribe_service.subscribe(@queue_name) do |delivery_info, metadata, payload|
    Rails.logger.debug "#{@queue_name} received message"
    STDOUT.flush
    payload_hash = JSON.parse(payload).with_indifferent_access
    process(payload_hash, metadata, delivery_info)
  end

  handle_usr1_n_usr2

  subscribe_service.channel.work_pool.join
rescue SignalException
  puts 'Terminating process ..'
  subscribe_service.channel.work_pool.shutdown(true)
  puts 'Stopped.'
end
process() click to toggle source
# File lib/totoro/base_worker.rb, line 39
def process; end

Private Instance Methods

config() click to toggle source
# File lib/totoro/base_worker.rb, line 53
def config
  @config ||= Totoro::Config.new(@prefix)
end
handle_usr1_n_usr2() click to toggle source
# File lib/totoro/base_worker.rb, line 43
def handle_usr1_n_usr2
  %w[USR1 USR2].each do |signal|
    Signal.trap(signal) do
      puts "#{signal} received."
      handler = "on_#{signal.downcase}"
      send handler if respond_to?(handler)
    end
  end
end
subscribe_service() click to toggle source
# File lib/totoro/base_worker.rb, line 57
def subscribe_service
  @subscribe_service ||= Totoro::SubscribeService.new(config)
end