Как настроить обработку группы JMS в кластере Wildfly? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть 2 сервера server1 и server2. сервер1 является главным сервером, а сервер2 является подчиненным. Оба работают в кластерной среде.

Если 2 сообщения с одинаковым идентификатором группы поступают одновременно на узел 1 и узел 2, они не будут знать, какому получателю должно быть отправлено сообщение. Поэтому сообщение в конечном итоге обрабатывается разными потребителями, и иногда сообщение, которое поступило первым, обрабатывается позднее, что нежелательно.

Я хотел бы настроить систему так, чтобы оба узла знали друг друга, что сообщение должнобыть обработанным каким потребителем.

Решение, которое я пробовал: Настроил server1 с групповым обработчиком LOCAL и server2 с REMOTE. Теперь, всякий раз, когда приходит сообщение, обработчик LOCAL группы идентифицирует, что потребитель находится на каком узле, и сообщение выбирается соответствующим образом.

Это решение действует до тех пор, пока server1 не будет работать нормально. Однако, если server1 выходит из строя, сообщения больше не будут обрабатываться.

Чтобы это исправить, я добавил сервер резервного копирования в подсистему обмена сообщениями active mq server1 на server2 и аналогичным образом сделал то же самое для server2.

/ profile = garima / subsystem = messaging-activemq / server = backup: add

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

Пожалуйста, предложите любой другой подход или как я могу настроить сценарий, где сервер с обработчиком LOCAL группыостанавливается.

1 Ответ

0 голосов
/ 08 ноября 2019

Рекомендуемое решение для кластерной группировки - это то, что вы настроили - резервная копия для узла с обработчиком группировки LOCAL. Суть здесь в том, что если в кластере нет активного узла с ЛОКАЛЬНЫМ обработчиком группировки, то решение о том, какой потребитель должен обрабатывать, какую группу просто не может быть сделано. Мне кажется, что ваш брокер резервного копирования просто не работает должным образом (что, вероятно, является темой для другого вопроса).

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

...