直接回复伪队列与兔子宝石

时间:2017-07-12 17:32:26

标签: ruby rabbitmq rpc bunny

我正在使用bunny 2.7.0在ruby 2.3中创建一个rabbitmq rpc 我已经为每个客户端创建了一个回复队列。但我预计会有相当多的客户,以这种方式做这件事效率不高。我想使用rabbitmq的直接回复功能

connection = Bunny.new(rabbitmq_url, :automatically_recover => true)
connection.start

channel = connection.create_channel

reply_queue = channel.queue('amq.rabbitmq.reply-to', no_ack: true)

在最后一行代码中我收到错误

Bunny::AccessRefused: ACCESS_REFUSED - queue name 'amq.rabbitmq.reply-to' contains reserved prefix 'amq.*'

理论上由于http://rubybunny.info/articles/queues.html

而预期

但另一方面 - 有一篇文章https://www.rabbitmq.com/direct-reply-to.html描述了该队列的可用性。

我想声明一个队列,因为我需要订阅它以接收响应

consumer = reply_queue.subscribe do |_, properties, payload|
    # action
end

我不明白我做错了什么(

有类似的主题与这种方法的例子,但创建在其他语言和工具,如nodejs,似乎工作正常。兔子我做错了什么?

更新

发现问题 - 我使用了兔子服务器的odler版本。那个不支持直接回复队列的那个

1 个答案:

答案 0 :(得分:0)

我认为它试图创建你不允许做的事情。

https://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-September/030095.html

我的红宝石有点生锈,但试试看:

channel = connection.create_channel
channel.queue_declare('amq.rabbitmq.reply-to', :passive => true)