Q: Existe uma forma de fazer "migration" no RabbitMQ? Olá!
Gostaria de saber se existe alguma alternativa para criar/alterar/remover exchanges, filas e bindings sem depender do framework (no meu caso, Spring) para isto. 
Muitas vezes precisamos alterar o nome de uma Routing Key, Fila ou Exchange, e estes frameworks não permitem este tipo de alteração mais refinada. Como consequência, a tendência é que os nomes originais permaneçam. No futuro, isto acaba deixando confusa a organização das filas, pois você não consegue facilmente dar uma manutenção adequada no nome delas e eventualmente reorganizá-las.
O ideal para mim seria uma ferramenta que controle isto, como ocorre com as ferramentas de migração (migration), como o Liquibase, Flyway, etc.
Fazendo um paralelo com o banco de dados, atualmente deixar o Spring criar tudo no RabbitMQ me parece análogo a deixar ligado o hbm2ddl na opção "update" no Hibernate.
Sei que perguntas sobre ferramentas não é adequado no SO, mas como não encontrei nenhuma alternativa para este problema então achei que a pergunta era válida.

A: Depois de pesquisar sobre o assunto, creio que não posso aplicar uma estratégia de migration para as filas do RabbitMQ tal como faço para um banco de dados.
A possibilidade de alterar elas existe, mas não de uma forma declarativa. Precisa ser feito programando a alteração.
Com Spring, eu posso usar o RabbitAdmin.declareBinding() para fazer o bind com uma chave de rota (e/ou exchange) diferente. Posso usar o RabbitAdmin.removeBinding() para remover a antiga.
Não é possível alterar os argumentos de uma fila criada, como suas variáveis relacionadas a DLQ (Dead Letter Queue) ou durabilidade.
Para mover mensagens de uma fila antiga para uma fila nova, posso programar para fazer isto ou usar o plugin shovel, instalado no próprio RabbitMQ.
