Ruby rabbitmq在服务器重新启动后删除队列绑定

Ruby rabbitmq在服务器重新启动后删除队列绑定,ruby,rabbitmq,amqp,bunny,Ruby,Rabbitmq,Amqp,Bunny,我正在使用bunny设置rabbitmq队列 namespace :rabbitmq do desc 'Setup routing' task :setup_test_commands_queue do require 'bunny' conn = Bunny.new(ENV['SYNC_AMQP'], read_timeout: 10, heartbeat: 10) conn.start ch = conn.create_channel #

我正在使用bunny设置rabbitmq队列

namespace :rabbitmq do
  desc 'Setup routing'
  task :setup_test_commands_queue do
    require 'bunny'

    conn = Bunny.new(ENV['SYNC_AMQP'], read_timeout: 10, heartbeat: 10)
    conn.start

    ch = conn.create_channel

    # get or create exchange
    x = ch.direct('testsync.pcc', :persistent => true)

    # get or create queue (note the durable setting)
    queue = ch.queue('test.commmands', :durable => true, :ack => true, :routing_key => 'test_cmd')

    # bind queue to exchange
    queue.bind(x, :routing_key => 'test_cmd')

    conn.close
  end
end
上面的代码创建队列并绑定路由密钥“test_cmd”。当我重新启动rabbitmq服务器时,队列仍然存在,但队列绑定被删除

我正在使用
sudo invoke rc.d rabbitmq server restart
命令重新启动rabbitmq

RabbitMQ版本:RabbitMQ 3.2.4,Erlang R16B03


这是rabbitmq的默认行为吗?如何持久化队列绑定?

队列已持久化,但exchange未持久化。这行代码有问题

x = ch.direct('testsync.pcc', :persistent => true)
兔子不理解参数持久性。我应该通过持久参数。 像这样:

x = ch.direct('testsync.pcc', :durable => true)

现在一切正常。即使在rabbitmq重新启动绑定后,也会保持绑定。

您确定要将队列绑定到的交换机是持久的吗?还有排队吗?看看代码,看起来确实如此,但是你能再检查一遍吗,例如使用web ui吗?@cantSleepNow我检查了这个。队列是持久的,但exchange不是。每次重新启动服务器时,exchange都会被删除。我认为这行有点问题:
x=ch.direct('testsync.pcc',:persistent=>true)
得到了这个。。。它应该是
x=ch.direct('testsync.pcc',:dustable=>true)
。bunny正在忽略参数persistent。它应该是耐用的。