mirror of
https://github.com/jimeh/amqp-failover.git
synced 2026-02-19 10:56:44 +00:00
52 lines
1.1 KiB
Ruby
52 lines
1.1 KiB
Ruby
# encoding: utf-8
|
|
|
|
module AMQP
|
|
module FailoverClient
|
|
include AMQP::BasicClient
|
|
|
|
attr_accessor :on_disconnect
|
|
attr_accessor :settings
|
|
|
|
def self.extended(base)
|
|
base.on_disconnect = proc {
|
|
Failover::OnDisconnect.new(base).call
|
|
}
|
|
end
|
|
|
|
def logger
|
|
@logger ||= Failover::Logger.new
|
|
end
|
|
|
|
def failover_conf
|
|
@failover_conf ||= Failover::Config.new
|
|
end
|
|
|
|
def configs
|
|
failover_conf.configs
|
|
end
|
|
|
|
def clean_exit(msg = nil)
|
|
msg ||= "clean exit"
|
|
logger.info(msg)
|
|
logger.error(msg)
|
|
Process.exit
|
|
end
|
|
|
|
def process_frame(frame)
|
|
if mq = channels[frame.channel]
|
|
mq.process_frame(frame)
|
|
return
|
|
end
|
|
|
|
if frame.is_a?(AMQP::Frame::Method) && (method = frame.payload).is_a?(AMQP::Protocol::Connection::Close)
|
|
if method.reply_text =~ /^NOT_ALLOWED/
|
|
raise AMQP::Error, "#{method.reply_text} in #{::AMQP::Protocol.classes[method.class_id].methods[method.method_id]}"
|
|
end
|
|
end
|
|
super(frame)
|
|
end
|
|
|
|
end # FailoverClient
|
|
end # AMQP
|
|
|