Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save michaelklishin/1048076 to your computer and use it in GitHub Desktop.
Save michaelklishin/1048076 to your computer and use it in GitHub Desktop.
require "rubygems"
require "amqp" # requires version >= 0.8.0.RC14
puts "=> Example of automatic AMQP channel and queues recovery"
puts
AMQP.start(:host => "localhost") do |connection, open_ok|
connection.on_error do |ch, connection_close|
raise connection_close.reply_text
end
ch1 = AMQP::Channel.new(connection)
ch1.auto_recovery = true
ch1.on_error do |ch, channel_close|
raise channel_close.reply_text
end
if ch1.auto_recovering?
puts "Channel #{ch1.id} IS auto-recovering"
end
connection.on_tcp_connection_loss do |conn, settings|
puts "[network failure] Trying to reconnect..."
conn.reconnect(false, 2)
end
ch1.queue("amqpgem.examples.queue1", :auto_delete => true).bind("amq.fanout")
ch1.queue("amqpgem.examples.queue2", :auto_delete => true).bind("amq.fanout")
ch1.queue("amqpgem.examples.queue3", :auto_delete => true).bind("amq.fanout").subscribe do |metadata, payload|
end
show_stopper = Proc.new {
connection.disconnect { puts "Disconnected. Exiting…"; EventMachine.stop }
}
Signal.trap "TERM", show_stopper
Signal.trap "INT", show_stopper
EM.add_timer(30, show_stopper)
puts "Connected, authenticated. To really exercise this example, shut AMQP broker down for a few seconds. If you don't it will exit gracefully in 30 seconds."
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment