Как запустить два приложения Grails на одном компьютере и не делить их с rabbitMQ

У меня есть приложение Grails, работающее с одним узлом кролика. Это просто супер. Я хочу запустить одно и то же приложение во второй раз на одной и той же машине с другим портом. В настоящее время оба приложения отвечают на задания из обоих приложений. Я хочу, чтобы их кролики были независимыми. Какой самый простой способ гарантировать, что каждое приложение отвечает только на сообщения, которые оно отправляет? Несколько очередей кролика?

2 ответа

Решение

Вы можете предоставить запись виртуального хоста в конфигурации grails:

rabbitmq.connectionfactory.virtualHost  The name of the virtual host to connect to

Определите двух разных vhosts в RabbitMQ, и у каждого приложения grails будет своя собственная конфигурируемая область для использования. Сообщения, отправленные через один vhost, будут доступны только на этом vhost, эффективно разделяя два приложения grails без необходимости изменять настройку очереди или другие внутренние части каждого приложения - только конфигурацию соединения.

Помните, что контроль доступа выполняется отдельно для каждого хоста, поэтому вы должны предоставить своему пользователю доступ к каждому виртуальному хосту в rabbitmq.

Как сказал @fiskfisk, несколько vhosts - это вариант, и он будет работать особенно хорошо, если у вас есть сложный набор очередей, обменов и привязок. Есть некоторые недостатки использования нового vhost для второго приложения, в том числе дублирование управления контролем доступа, а также некоторые незначительные потери производительности.

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

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


ТЛ; др;

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

Для быстрой и грязной вчерашней работы используйте отдельный vhost для каждого экземпляра вашего приложения.

Другие вопросы по тегам