0

我在 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,而服务器没有,但是当我第二次运行它时,客户端无法连接到服务器。我无法克服这个问题。当我第二次运行它时,我看不出为什么客户端会停止连接?

4

1 回答 1

0

此问题的根本原因是 AMQP 的每个队列的 new 都需要有单独的连接。例如:

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

并像那样使用它。

但总体而言,整个情况是使用deamon-kitgem。它将 AMQP 分离到一个单独的应用程序中,并且 AMQP 连接在该“应用程序”内处理,或者更好 - 一个守护程序。

它还有一个 AMQP 生成器,所以最好使用它。

于 2013-10-18T07:55:27.610 回答