2013-10-10 1 views
0

У меня возникли проблемы с подключением к AMQP в моем тестировании rSpec. У меня есть код, как это:Не удается подключиться к AMQP дважды, чтобы отправлять ему сообщения

Module Rabbit 
    Class Client 

    def start 
     EventMachine.run do 
     connection = AMQP.connect(Settings_object) #it holds host, username and password information 

     channel = AMQP::Channel.new(connection) 
     channel.queue("queue_name", :durable => true) 
     channel.default_exchange.publish("A test message", :routing_key => "queue_name")  

     end 
    end 
end 


Module Esper 
    Class Server 

    def start 
     EventMachine.run do 
     connection = AMQP.connect(Settings_object) #it holds host, username and password information 

     =begin 
     Some code to subscribe to queues 
     =end 

     end 
    end 
end 

Моя проблема в том, когда я запустить RSpec:

@client = Rabbit::Client.new 
@server = Esper::Server.new 

Thread.new do 
    @client.start 
end 
Thread.new do 
    @server.start 
end 

На первый клиент может подключиться к AMQP, и сервер не делает, но когда я запустите его во второй раз, затем Клиент не сможет подключиться к серверу. Я не могу справиться с этой проблемой. Я не вижу причины, по которой клиент перестанет подключаться, когда я запустил его во второй раз?

ответ

0

Основной причиной этой проблемы является то, что для каждой очереди для AMQP необходимо иметь отдельное соединение. Например:

queue1_connectom = AMQP::Channel.new(connection) 
queue2_connectom = AMQP::Channel.new(connection) 

И используйте его так.

Но в целом для всей этой ситуации необходимо использовать драгоценный камень deamon-kit. Он отделяет AMQP в отдельном приложении, а соединения AMQP обрабатываются в этом «приложении» или еще лучше - «Deamon».

У этого также есть генератор для AMQP, так что хорошо бы это использовать.

Смежные вопросы