I am using bunny to setup rabbitmq queue.
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
Above code creates queue and binds a routing key 'test_cmd'. When I restart the rabbitmq server, the queue persists, but queue binding gets deleted.
I am using sudo invoke-rc.d rabbitmq-server restart
command to restart rabbitmq.
Rabbit mq version : RabbitMQ 3.2.4, Erlang R16B03.
Is this default behaviour of rabbitmq? How can I persist my queue binding?
The queue was persisted but exchange was not. There was problem with this line of code.
x = ch.direct('testsync.pcc', :persistent => true)
Bunny does not understand parameter persistent. I should have passed durable parameter. Like this :
x = ch.direct('testsync.pcc', :durable => true)
Now everything works fine. Even after rabbitmq restart binding is persisted.