Class: Banter::Server::ClientQueueListener

Inherits:
Object
  • Object
show all
Includes:
Celluloid
Defined in:
lib/banter/server/client_queue_listener.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(worker_class) ⇒ ClientQueueListener

Returns a new instance of ClientQueueListener.



13
14
15
16
# 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

Instance Attribute Details

#worker_classObject (readonly)

Returns the value of attribute worker_class.



11
12
13
# File 'lib/banter/server/client_queue_listener.rb', line 11

def worker_class
  @worker_class
end

Instance Method Details

#clear_dead_letter(dead_letter_queue, envelope) ⇒ Object



47
48
49
50
51
52
# 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) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 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

#shutdownObject



25
26
27
# File 'lib/banter/server/client_queue_listener.rb', line 25

def shutdown
  @subscriber.teardown if @subscriber.present?
end

#startObject



18
19
20
21
22
23
# 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