67 lines
1.6 KiB
Ruby
67 lines
1.6 KiB
Ruby
require 'rubygems'
|
|
require 'eventmachine'
|
|
require 'amqp'
|
|
require 'json'
|
|
require 'lib/helpers'
|
|
|
|
|
|
class MyServer
|
|
|
|
include Helpers
|
|
|
|
def initialize
|
|
|
|
logger.debug("Connecting to rabbitmq")
|
|
AMQP.connect(:host => "localhost",
|
|
:port => 5672,
|
|
:username => "guest",
|
|
:password => "guest") do |connection|
|
|
@connection = connection
|
|
logger.debug("Initializing channel")
|
|
AMQP::Channel.new(connection) do |channel|
|
|
server_exchange = AMQP::Exchange.new(channel, :topic, "nailgun.topic")
|
|
|
|
server_queue = AMQP::Queue.new(channel, "mcollective",
|
|
:exclusive => true, :auto_delete => true)
|
|
server_queue.bind(server_exchange, :routing_key => "mcollective")
|
|
|
|
server_queue.subscribe() do |metadata, payload|
|
|
logger.debug("Received message: #{payload}")
|
|
|
|
payload_parsed = JSON.parse(payload)
|
|
msg_id = payload_parsed["msg_id"]
|
|
exchange = AMQP::Exchange.new(channel, :direct, msg_id,
|
|
:auto_delete => true)
|
|
exchange.publish("Response", :routing_key => msg_id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def disconnect &blk
|
|
@connection.close
|
|
yield if blk
|
|
end
|
|
|
|
end
|
|
|
|
|
|
EM.run do
|
|
myserver = MyServer.new
|
|
|
|
Signal.trap("TERM") do
|
|
puts "TERM signal has been caught"
|
|
myserver.disconnect do
|
|
EventMachine.stop
|
|
end
|
|
end
|
|
|
|
Signal.trap("INT") do
|
|
puts "INT signal has been caught"
|
|
myserver.disconnect do
|
|
EventMachine.stop
|
|
end
|
|
end
|
|
|
|
end
|