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