2013-10-10 73 views
0

我在連接到我的rSpec測試中的AMQP時遇到了問題。我有這樣的代碼:無法連接到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的發生器,所以好用的就是使用它。

相關問題