2016-04-03 15 views
2

私はrabbitmqキューを設定するためにバニーを使用しています。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を再起動しています。

ウサギmqバージョン:RabbitMQ 3.2.4、アーランR16B03。

このデフォルト動作はrabbitmqですか?キューバインディングを永続化するにはどうすればよいですか?

+0

キューをバインドしている交換機が永続的になっていますか?キューも同様に?コードを見ると確かにそうだが、例えばweb uiを使って二重チェックすることができるだろうか? – cantSleepNow

+0

@cantSleepNow私はこれをチェックしました。キューは永続的ですが、交換はできません。再起動するたびに、サーバ交換が削除されます。 'x = ch.direct( 'testsync.pcc'、:persistent => true)' – dnsh

+0

これは... 'x = ch.direct( 'testsync.pcc')でなければなりません。 '、:耐久性=> true) '。バニーはパラメータ**の永続**を無視しています。 **耐久性があります**。 – dnsh

答えて

1

キューは維持されましたが、交換は行われませんでした。このコード行に問題がありました。

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

バニーは、パラメータ永続を理解していません。私は耐久性パラメータを渡す必要があります。 このように:

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

すべて正常に動作します。 rabbitmqを再起動しても、バインドは継続されます。

関連する問題