class Banter::Server::ClientQueueListener

Attributes

worker_class[R]

Public Class Methods

new(worker_class) click to toggle source
# File lib/banter/server/client_queue_listener.rb, line 13
def initialize(worker_class)
  @worker_class = worker_class
  @subscriber   = RabbitMQSubscriber.new(worker_class.config)
end

Public Instance Methods

clear_dead_letter(dead_letter_queue, envelope) click to toggle source
# File lib/banter/server/client_queue_listener.rb, line 47
def clear_dead_letter(dead_letter_queue, envelope)
  if !dead_letter_queue.blank? && !envelope[:dead_letter].blank?
    envelope.dead_letter.completed = 1
    Banter::Publisher.instance.publish_to_queue(dead_letter_queue, envelope)
  end
end
message_received(delivery_info, properties, envelope) click to toggle source
# File lib/banter/server/client_queue_listener.rb, line 29
def message_received(delivery_info, properties, envelope)
  Banter::RabbitLogger.log(::Logger::DEBUG, "Message received by listener on #{worker_class.name} with payload: #{envelope[:payload]}")
  worker  = worker_class.new(delivery_info, properties, envelope[:context], envelope)
  payload = envelope[:payload]
  worker.perform!(payload)
  clear_dead_letter(worker_class.config.dead_letter_queue_name, envelope)
rescue ::Banter::PayloadValidationError => banter_error
  Banter::RabbitLogger.log(::Logger::ERROR, { worker: worker_class.name, message: banter_error.message, envelope: envelope })

  ::Banter::Notifier.notify(banter_error, { delivery_info: delivery_info, properties: properties, envelope: envelope})
  raise banter_error
rescue => e
  Banter::RabbitLogger.log(::Logger::ERROR, "Failed message for #{worker_class.name} #{e.message}")

  ::Banter::Notifier.notify(e, { delivery_info: delivery_info, properties: properties, envelope: envelope})
  raise e
end
shutdown() click to toggle source
# File lib/banter/server/client_queue_listener.rb, line 25
def shutdown
  @subscriber.teardown if @subscriber.present?
end
start() click to toggle source
# File lib/banter/server/client_queue_listener.rb, line 18
def start
  @subscriber.start do |delivery_info, properties, envelope|
    message_received(delivery_info, properties, envelope)
    true
  end
end