From 9e0e2ab567a20713b13aab6153df64d0a485ad8e Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Mon, 19 Nov 2012 19:00:51 -0500 Subject: [PATCH] Goofing around with log consumers although it would appear the logging exchange doesn't exist on all vhosts (???) --- sylvilagus/jruby/lib/sylvilagus/ch03.rb | 4 ++ .../lib/sylvilagus/ch03/log_listeners.rb | 56 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 sylvilagus/jruby/lib/sylvilagus/ch03.rb create mode 100644 sylvilagus/jruby/lib/sylvilagus/ch03/log_listeners.rb diff --git a/sylvilagus/jruby/lib/sylvilagus/ch03.rb b/sylvilagus/jruby/lib/sylvilagus/ch03.rb new file mode 100644 index 0000000..5a9b1a2 --- /dev/null +++ b/sylvilagus/jruby/lib/sylvilagus/ch03.rb @@ -0,0 +1,4 @@ +module Sylvilagus + module Ch03 + end +end diff --git a/sylvilagus/jruby/lib/sylvilagus/ch03/log_listeners.rb b/sylvilagus/jruby/lib/sylvilagus/ch03/log_listeners.rb new file mode 100644 index 0000000..149df97 --- /dev/null +++ b/sylvilagus/jruby/lib/sylvilagus/ch03/log_listeners.rb @@ -0,0 +1,56 @@ +require 'sylvilagus/init' +require 'sylvilagus/ch03' + +require 'rabbitmq-client.jar' +import com.rabbitmq.client.ConnectionFactory +import com.rabbitmq.client.DefaultConsumer +import org.jruby.RubyString + +class Sylvilagus::Ch03::LogListeners + class LogConsumer < DefaultConsumer + def handleDelivery(consumer_tag, envelope, properties, body) + body_string = RubyString.bytes_to_string(body) + puts "#{level}: #{body_string}" + channel.basic_ack(envelope.delivery_tag, false) + end + end + + def main + factory = ConnectionFactory.new + factory.uri = ENV.fetch('SYLVILAGUS_AMQP_URI') + conn = factory.new_connection + + trap :INT do + conn.close + exit 1 + end + + channel = conn.create_channel + + errors_queue = channel.queue_declare.get_queue + warnings_queue = channel.queue_declare.get_queue + info_queue = channel.queue_declare.get_queue + + channel.queue_bind(errors_queue, 'amq.rabbitmq.log', 'error') + channel.queue_bind(warnings_queue, 'amq.rabbitmq.log', 'warning') + channel.queue_bind(info_queue, 'amq.rabbitmq.log', 'info') + + errors_consumer = LogConsumer.new(channel) + warnings_consumer = LogConsumer.new(channel) + info_consumer = LogConsumer.new(channel) + + channel.basic_consume(errors_queue, false, errors_consumer) + channel.basic_consume(warnings_queue, false, warnings_consumer) + channel.basic_consume(info_queue, false, info_consumer) + + loop do + sleep 1 + end + ensure + conn.close + end +end + +if $0 == __FILE__ + Sylvilagus::Ch03::LogListeners.new.main +end