В настоящее время мы используем следующий подход при управлении конфигурацией приложения для rabbitmq:
Мы строим базовый кластер rabbitmq, используя Ansible.
Затем у нас есть более 20 продуктов, каждый из которых зависит от RabbitMQ, и у каждого будут свои требования к производству и потреблению сообщений.Каждое приложение имеет файл json, который описывает каждый обмен / очередь / привязку, необходимый для приложения (например, rabbitmq.json), мы генерируем обмены / очереди / привязки заранее определенным способом (см. Ниже). Каждое приложение регистрирует производителей и потребителей.требует, чтобы каждое приложение также создавало очереди в реальном времени только на время работы приложения (этот тип очереди требуется только нескольким приложениям)
Этот вопрос, который у меня возникает, касается генерации обменов, очереди и привязки, которые живут за пределами жизненного цикла приложения.В настоящее время мы настраиваем эти очереди вне самих приложений заранее определенным способом, а именно:
- Создайте файл json для приложения, который описывает каждый обмен / очередь / привязку, требуемый для приложения (например, rabbitmq.json)
- Мы написали сценарий, который затем проходит через все файлы rabbitmq.json приложения и генерирует новый единственный сценарий Powershell (например, generate_queues_exchanges_bindings.ps1), который содержит все обменные / очереди и привязки, которые мы управляем API-вызовами (исполняемые черезcurl)
- Затем мы выполняем команды curl, сгенерированные в этом сценарии generate_queues_exchanges_bindings.ps1
Однако недавно мы изучали эту область.Некоторые из нас предлагают использовать свободный интерфейс для каждого приложения (при запуске) для генерации всех обменов / очередей / привязок и т. Д. Это, конечно, должно работать, поскольку все эти команды являются идемпотентными по своей природе.Другие не хотят идти по пути настройки всех этих очередей, обменов и привязок в нашем приложении и хотят заранее определить конфигурацию заранее.
Какой правильный / рекомендуемый подход?быть предварительной настройкой наших очередей / обменов / привязок rabbitmq или каждое приложение должно (при запуске) отвечать за создание этих очередей / обменов / привязок?