3

我正在使用兔子来设置 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。

Rabbit mq 版本:RabbitMQ 3.2.4,Erlang R16B03。

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

4

1 回答 1

2

队列保持不变,但交换没​​有。这行代码有问题。

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

Bunny 不理解参数persistent。我应该传递持久参数。像这样 :

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

现在一切正常。即使在 rabbitmq 重新启动绑定之后仍然存在。

于 2016-04-04T01:27:05.177 回答