mirror of
https://github.com/jimeh/amqp-failover.git
synced 2026-02-19 02:46:43 +00:00
46 lines
1.1 KiB
Ruby
46 lines
1.1 KiB
Ruby
# encoding: utf-8
|
|
|
|
module AMQP
|
|
class Failover
|
|
class ServerDiscovery < EM::Connection
|
|
|
|
class << self
|
|
attr_accessor :connection
|
|
end
|
|
|
|
def self.monitor(conf = {}, retry_interval = nil, &block)
|
|
if EM.reactor_running?
|
|
start_monitoring(conf, retry_interval, &block)
|
|
else
|
|
EM.run { start_monitoring(conf, retry_interval, &block) }
|
|
end
|
|
end
|
|
|
|
def initialize(args)
|
|
@done = args[:done]
|
|
@timer = args[:timer]
|
|
end
|
|
|
|
def connection_completed
|
|
@done.call
|
|
@timer.cancel
|
|
close_connection
|
|
end
|
|
|
|
def self.start_monitoring(conf = {}, retry_interval = nil, &block)
|
|
conf = conf.clone
|
|
retry_interval ||= 5
|
|
conf[:done] = block
|
|
conf[:timer] = EM::PeriodicTimer.new(retry_interval) do
|
|
@connection = connect(conf)
|
|
end
|
|
end
|
|
|
|
def self.connect(conf)
|
|
EM.connect(conf[:host], conf[:port], self, conf)
|
|
end
|
|
|
|
end # ServerDiscovery
|
|
end # Failover
|
|
end # AMQP
|