class BunnyBurrow::Server

Public Class Methods

create_response() click to toggle source
# File lib/bunny_burrow/server.rb, line 5
def self.create_response
  {
    status: STATUS_OK,
    error_message: nil,
    data: {}
  }
end

Public Instance Methods

shutdown() click to toggle source
Calls superclass method BunnyBurrow::Base#shutdown
# File lib/bunny_burrow/server.rb, line 67
def shutdown
  stop_waiting
  super
end
stop_waiting() click to toggle source
# File lib/bunny_burrow/server.rb, line 61
def stop_waiting
  return unless @waiting
  process_lock.synchronize { process_condition.signal }
  @waiting = false
end
subscribe(routing_key, queue_name = routing_key, &block) click to toggle source
# File lib/bunny_burrow/server.rb, line 13
def subscribe(routing_key, queue_name = routing_key, &block)
  queue = channel.queue(queue_name, exclusive: false, auto_delete: true)
  queue.bind(topic_exchange, routing_key: routing_key)

  details = {
    routing_key: routing_key,
    queue: queue.name,
    exchange: topic_exchange.name
  }

  log "Subscribing #{details}"
  queue.subscribe(manual_ack: true) do |delivery_info, properties, payload|
    begin
      details = {
        delivery_info: delivery_info,
        properties: properties
      }

      details[:request] = payload if log_request?
      log "Receiving #{details}"

      response = block.call(payload)

      details[:response] = response if log_response?

      log "Replying #{details}"
      default_exchange.publish(response.to_json, :routing_key => properties.reply_to, persistence: false)

      log "Acknowledging #{details}"
      channel.ack delivery_info.delivery_tag
    rescue => e
      log e.message, level: :error
      response = {
        status: STATUS_SERVER_ERROR,
        error_message: e.message
      }
      default_exchange.publish(response.to_json, :routing_key => properties.reply_to, persistence: false)
    end
  end
rescue => e
  log e.message, level: :error
end
wait() click to toggle source
# File lib/bunny_burrow/server.rb, line 56
def wait
  @waiting = true
  process_lock.synchronize { process_condition.wait(process_lock) }
end

Private Instance Methods

process_condition() click to toggle source
# File lib/bunny_burrow/server.rb, line 78
def process_condition
  @process_condition ||= ConditionVariable.new
end
process_lock() click to toggle source
# File lib/bunny_burrow/server.rb, line 74
def process_lock
  @process_lock ||= Mutex.new
end