Ich verwende Hase, um die rabbitmq-Warteschlange einzurichten.rabbitmq löscht die Warteschlangenbindung nach dem Neustart des Servers.
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
Der obige Code erstellt eine Warteschlange und bindet einen Routingschlüssel "test_cmd". Wenn ich den rabbitmq-Server neu starte, bleibt die Warteschlange bestehen, aber die Warteschlangenbindung wird gelöscht.
Ich verwende sudo invoke-rc.d rabbitmq-server restart
Befehl, um Rabbitmq neu zu starten.
Kaninchen mq Version: RabbitMQ 3.2.4, Erlang R16B03.
Ist das Standardverhalten von rabbitmq? Wie kann ich meine Warteschlangenbindung beibehalten?
Sind Sie sicher, dass der Exchange, an den Sie die Warteschlange binden, persistent ist? Die Warteschlange auch? Mit Blick auf den Code scheint es so, aber könnten Sie überprüfen, zum Beispiel mit Web-Ui? – cantSleepNow
@cantSleepNow Ich habe das überprüft. Warteschlange ist hartnäckig, aber Austausch ist nicht. Jedes Mal, wenn ich den Server neu starte, wird Exchange gelöscht. Ich denke, mit dieser Zeile stimmt etwas nicht: 'x = ch.direct ('testsync.pcc',: persistent => true)' – dnsh
Das ist ... Es sollte 'x = ch.direct ('testsync.pcc ',: haltbar => wahr) '. Der Hase ignoriert den Parameter ** persistent **. Es sollte ** haltbar ** sein. – dnsh