RabbitMQ在服务器重启后删除队列绑定。

3
我使用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的默认行为吗?我该如何保留我的队列绑定?

你确定你绑定队列的交换机是持久化的吗?队列也是?从代码看似乎是这样,但你能否再次确认一下,例如使用Web UI? - cantSleepNow
@cantSleepNow 我已经检查过了。队列是持久化的,但交换机不是。每次重新启动服务器时,交换机都会被删除。我认为这一行代码有问题:x = ch.direct('testsync.pcc', :persistent => true) - dnsh
收到了... 应该是 x = ch.direct('testsync.pcc', :durable => true)。 bunny 忽略了参数 persistent,应该是 durable - dnsh
1个回答

2

队列已持久化,但交换机未持久化。这行代码存在问题。

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

兔子不理解“persistent”参数。我应该使用“durable”参数。就像这样:
x = ch.direct('testsync.pcc', :durable => true)

现在一切都正常工作。即使在rabbitmq重新启动后绑定也会被保留。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接