我刚刚开始使用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
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
当您有两个订阅时,您将无法使用block: true
,因为只有第一个订阅会被阻止;它永远不会获得第二个订阅。
您可以做的一件事是设置两个订阅而没有阻塞(这将自动产生两个线程来处理消息),然后通过一个等待循环来阻塞您的主线程(添加到{ {1}}):
rescue