Files
amqp-failover/lib/amqp/failover/basic_client/on_disconnect.rb

46 lines
1.6 KiB
Ruby

# encoding: utf-8
module AMQP
module Failover
module BasicClient
class OnDisconnect
attr_accessor :base
attr_accessor :failover
attr_accessor :configs
attr_accessor :logger
def initialize(base)
@base = base
@configs = @base.configs
@failover_conf = @base.failover_conf
@logger = @base.logger
end
def call
@logic ||= Logic.new(@configs.configs, @failover_conf.get_primary, @failover_conf.failover_config)
if (new_settings = @logic.failover_from(@base.settings))
log_message = "Could not connect to or lost connection to server #{@base.settings[:host]}:#{@base.settings[:port]}. " +
"Attempting connection to: #{new_settings[:host]}:#{new_settings[:port]}"
@logger.error(log_message)
@logger.info(log_message)
if @failover_conf.get_primary == @base.settings
FallbackMonitor.monitor(@failover_conf.get_primary) do
@base.clean_exit("Primary server (#{@failover_conf.get_primary[:host]}:#{@failover_conf.get_primary[:port]}) is back. " +
"Performing clean exit to be relaunched with primary config.")
end
end
@base.settings = new_settings
@base.reconnect
else
raise Error, "Could not connect to server #{@base.settings[:host]}:#{@base.settings[:port]}"
end
end
end # OnDisconnect
end # BasicClient
end # Failover
end # AMQP