Ruby Bunny-从多个队列中消费

时间:2018-08-24 08:29:57

标签: ruby rabbitmq bunny

我刚刚开始使用Ruby,并且正在编写一篇文章来使用RabbitMQ队列中的一些消息。我正在用兔子来做。

因此,我创建了队列并将其绑定到交换。

但是,现在我不确定如何同时订阅它们并允许ruby应用程序继续运行(希望消息继续通过,即不被阻塞或至少长时间不被阻塞),直到我实际退出为止。 ctrl + c。

我尝试使用:block => true,但是由于我要订阅2个不同的队列,因此这意味着它仅消耗一个队列。

这就是我使用邮件的方式:

def consumer

    begin
      puts ' [*] Waiting for messages. To exit press CTRL+C'

      @oneQueue.subscribe(:manual_ack => true) do |delivery_info, properties, payload|
        puts('Got One Queue')
        puts "Received #{payload}, message properties are #{properties.inspect}"
      end

      @twoQueue.subscribe(:manual_ack => true) do |delivery_info, properties, payload|
        puts('Got Two Queue')
        puts "Received #{payload}, message properties are #{properties.inspect}"
      end

    rescue Interrupt => _
      #TODO - close connections here

      exit(0)
    end

end

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

当您有两个订阅时,您将无法使用block: true,因为只有第一个订阅会被阻止;它永远不会获得第二个订阅。

您可以做的一件事是设置两个订阅而没有阻塞(这将自动产生两个线程来处理消息),然后通过一个等待循环来阻塞您的主线程(添加到{ {1}}):

rescue