Now that I think about it, given that it is apps that declare queues and topologies in RabbitMQ, I think the issue is
more of a consumer coordination one. Therefore using a tool such as ZooKeeper or etcd to communicate
up-to-date queue name changes to apps is what I'd recommend.
Apps then can consume from the old queue for N seconds (e.g. to make sure no deliveries are left behind) and switch to the new ones.
A dynamic Shovel could move messages between queues as well but it won't make the consumers switch to the new one(s).