我在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 :(得分:0)
此问题的根本原因是AMQP的每个队列都需要新的单独连接。例如:
queue1_connectom = AMQP::Channel.new(connection)
queue2_connectom = AMQP::Channel.new(connection)
并使用它。
但总的来说,整个情况是使用deamon-kit
gem。它将AMQP分离为一个单独的应用程序,AMQP连接在该“应用程序”内处理或更好 - A Deamon。
它还有一个AMQP的生成器,所以好的方法就是使用它。