diff --git a/lib/amqp/failover.rb b/lib/amqp/failover.rb index 9bbac6c..c0dd01a 100644 --- a/lib/amqp/failover.rb +++ b/lib/amqp/failover.rb @@ -4,10 +4,11 @@ require 'yaml' require 'amqp/failover_client' require 'amqp/failover/config' -require 'amqp/failover/fallback' +require 'amqp/failover/disconnected' require 'amqp/failover/logger' require 'amqp/failover/logic' require 'amqp/failover/logic/failed_config' +require 'amqp/failover/server_discovery' require 'amqp/failover/version' module AMQP diff --git a/lib/amqp/failover/basic_client/on_disconnect.rb b/lib/amqp/failover/basic_client/on_disconnect.rb deleted file mode 100644 index 4df3d8e..0000000 --- a/lib/amqp/failover/basic_client/on_disconnect.rb +++ /dev/null @@ -1,45 +0,0 @@ -# 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 diff --git a/lib/amqp/failover/disconnected.rb b/lib/amqp/failover/disconnected.rb new file mode 100644 index 0000000..03f7181 --- /dev/null +++ b/lib/amqp/failover/disconnected.rb @@ -0,0 +1,43 @@ +# encoding: utf-8 + +module AMQP + module Failover + class Disconnected + + 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 + ServerDiscovery.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 # Disconnected + end # Failover +end # AMQP diff --git a/lib/amqp/failover/fallback.rb b/lib/amqp/failover/server_discovery.rb similarity index 91% rename from lib/amqp/failover/fallback.rb rename to lib/amqp/failover/server_discovery.rb index 4bf58a9..9ec62db 100644 --- a/lib/amqp/failover/fallback.rb +++ b/lib/amqp/failover/server_discovery.rb @@ -2,12 +2,20 @@ module AMQP module Failover - class Fallback < EM::Connection + class ServerDiscovery < EM::Connection class << self attr_accessor :connection end + def self.monitor(conf = {}, &block) + if EM.reactor_running? + start_monitoring(conf, &block) + else + EM.run { start_monitoring(conf, &block) } + end + end + def initialize(args) @done = args[:done] @timer = args[:timer] @@ -18,15 +26,7 @@ module AMQP @timer.cancel close_connection end - - def self.monitor(conf = {}, &block) - if EM.reactor_running? - start_monitoring(conf, &block) - else - EM.run { start_monitoring(conf, &block) } - end - end - + def self.start_monitoring(conf = {}, &block) conf = conf.clone conf[:done] = block @@ -39,6 +39,6 @@ module AMQP EM.connect(conf[:host], conf[:port], self, conf) end - end # Fallback + end # ServerDiscovery end # Failover end # AMQP diff --git a/spec/unit/amqp/failover/fallback_helper.rb b/spec/unit/amqp/failover/server_discovery_helper.rb similarity index 92% rename from spec/unit/amqp/failover/fallback_helper.rb rename to spec/unit/amqp/failover/server_discovery_helper.rb index a7ab4da..05735c3 100644 --- a/spec/unit/amqp/failover/fallback_helper.rb +++ b/spec/unit/amqp/failover/server_discovery_helper.rb @@ -1,4 +1,4 @@ -class FallbackHelper < AMQP::Failover::Fallback +class ServerDiscoveryHelper < AMQP::Failover::ServerDiscovery class << self alias :real_start_monitoring :start_monitoring diff --git a/spec/unit/amqp/failover/fallback_spec.rb b/spec/unit/amqp/failover/server_discovery_spec.rb similarity index 86% rename from spec/unit/amqp/failover/fallback_spec.rb rename to spec/unit/amqp/failover/server_discovery_spec.rb index 7a9ea1f..4fb5498 100644 --- a/spec/unit/amqp/failover/fallback_spec.rb +++ b/spec/unit/amqp/failover/server_discovery_spec.rb @@ -2,9 +2,9 @@ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) require 'spec_helper' -require 'fallback_helper' +require 'server_discovery_helper' -describe AMQP::Failover::Fallback do +describe AMQP::Failover::ServerDiscovery do before(:each) do $called = [] @@ -15,7 +15,7 @@ describe AMQP::Failover::Fallback do it "should initialize" do EM.run { EM.start_server('127.0.0.1', 9999) - @mon = FallbackHelper.monitor(@args) do + @mon = ServerDiscoveryHelper.monitor(@args) do $called << :done_block EM.stop_event_loop end @@ -32,7 +32,7 @@ describe AMQP::Failover::Fallback do it "should retry on error" do EM.run { - @mon = FallbackHelper.monitor(@args) do + @mon = ServerDiscoveryHelper.monitor(@args) do $called << :done_block EM.stop_event_loop end @@ -48,4 +48,3 @@ describe AMQP::Failover::Fallback do end end -