Hi,
I'm using RabbitMQ as a message queue in a service-oriented
architecture, where many separate web services publish messages to RabbitMQ. Those queues are in turn subscribed to by various
consumers, which perform background work.
I'd like to
change various backwards-incompatible parameters of the queues that are being published to by the web services (I'm adding a
dead-letter exchange, a dead-letter-routing-key to queues, and setting a
per-queue message TTL on some of the queues). Whats the best way to
change these queue parameters with minimal downtime and zero message
loss, and without coordinating the change across the web service
publishers? Just to give some details on this system, we use RabbitMQ
for small-load but highly-important messages. We're running just a
single node, and we've acked about 20K jobs from our work queues over the last
few weeks.
The distributed web services publish to queues passively, so they don't declare queues themselves which should mean I can change the parameters (aside from routing-key) without them having any problems.
I asked this question on StackOverflow, so you can see a couple possible solutions we discussed there (http://stackoverflow.com/questions/25274182/rabbitmq-change-queue-parameters-on-a-production-system), but please add your own thoughts on the best practices around this.
* Bind them in a way that makes the same messages go to them (when it is not possible, you almost always can get away by using an intermediate exchange and exchange-to-exchange bindings)