RabbitMQ изменяет параметры очереди в производственной системе

Я использую RabbitMQ в качестве очереди сообщений в сервис-ориентированной архитектуре, где многие отдельные веб-службы публикуют сообщения, связанные с очередями RabbitMQ. Эти очереди, в свою очередь, подписаны различными потребителями, которые выполняют фоновую работу; довольно ванильный вариант использования для RabbitMQ.

Теперь я хотел бы изменить некоторые параметры очереди (в частности, я бы хотел привязать очереди к новому обмену недоставленными буквами с определенным ключом маршрутизации). Моя проблема заключается в том, что внесение этого изменения в производственную систему проблематично по нескольким причинам.

Каков наилучший способ перехода в эти новые очереди без потери сообщений в производственной системе?

Я рассмотрел все, начиная от версий версий имен и заканчивая созданием нового виртуального хоста с новыми настройками и выполнением всех изменений на месте.

Вот некоторые из проблем, с которыми я сталкиваюсь:

Поскольку очереди RabbitMQ являются идемпотентными, разрозненные веб-службы объявляли очереди перед публикацией в них (если они еще не существуют). Как только вы измените параметры очереди (но сохраните тот же ключ маршрутизации), объявить очередь не удастся, и RabbitMQ закроет канал.

Я хотел бы не терять сообщения при изменении очереди (здесь я планирую подписать эксклюзивного потребителя, который сохраняет сообщения и затем повторно публикует их в новую очередь).

Общая координация между разрозненными издателями и клиентской базой (или, что еще лучше, способ избежать необходимости их координировать).

Ответы на вопрос(1)

Ваш ответ на вопрос