ruby - Ruby 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
任何帮助,将不胜感激。
谢谢!
解决方案
当您有两个订阅时,您不能使用block: true
,因为只有第一个会被阻止;它永远不会进入第二次订阅。
您可以做的一件事是在不阻塞的情况下设置两个订阅(这将自动生成两个线程来处理消息),然后使用等待循环阻塞您的主线程(在您的之前添加rescue
):
loop { sleep 5 }
推荐阅读
- javascript - 未捕获的类型错误:$(...).find(...).not(...).size 不是函数
- macos - 用于从登录窗口切换用户的 Apple 脚本
- r - 在 geom_text 中指定标签的位置
- authentication - Strapi / Nuxt - 找不到自定义路线
- bash - 我对 bash (macOS) 中的“sed”语句有疑问
- java - 可滚动微调器不显示来自 json API 的项目
- gradle - 升级 Gradle 后“无法解析所有配置文件”
- sql - 根据日期名称获取整月日期
- javascript - VueJS 和 Firebase 存储:如何等到图像上传完成后再将 URI 提交到数据库?
- r - 将 for 循环转换为 foreach 循环