############ # USAGE ############ # # jam-ruby$> bundle exec ruby scripts/simple_amqp_manager.rb ############ # OVERVIEW ############ # # This is a simple user of AmqpConnectionManager (a jam-ruby class), which will continually # send messages to rabbitmq, and, if it receives them, print them. # ############ # TESTS ############ # # Test 1: start with rabbitmq down # ------ # * stop rabbitmq # * run this file # * start rabbitmq, and messages should be sent/received # # Test 2: restart rabbitmq at steady state # ------ # * start rabbitmq # * run this file # * messages should be sent/received # * restart rabbitmq # * once rabbitmq is back up, messages should be sent/received # require 'amqp' require 'active_record' #require 'jam_db' # initialize ActiveRecord's db connection ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.yml'))["test"]) require 'jam_ruby' # initialize logging Logging.logger.root.level = :debug Logging.logger.root.appenders = Logging.appenders.stdout log = Logging.logger['SimpleAmqpManager'] include JamRuby users_exchange = nil EventMachine.run do manager = AmqpConnectionManager.new(true, 4, :host => '127.0.0.1', :port => 5672) manager.connect do |channel| log.debug "initializing channel with registration to dog topic" users_exchange = channel.topic('dogs') # create user messaging topic user_topic = channel.queue("", :auto_delete => true) user_topic.bind(users_exchange, :routing_key => "dog.#") user_topic.purge user_topic.subscribe(:ack => false) do |headers, msg| log.debug("received message from dog queue: #{msg}") end end EventMachine.add_periodic_timer(2) do unless users_exchange.nil? # if we have not connected yet ever, this will be nil log.debug "sending message: [super secret message]" users_exchange.publish("[super secret message]", :routing_key => "dog.leg") end end end