Изменить имя экземпляра узла при подключении к серверу Axon - PullRequest
0 голосов
/ 08 февраля 2019

В настоящее время я собираю интеграционные тесты для приложения Spring Boot / Axon.

В одном из этих тестов он (узел) создает другой узел через SpringApplicationBuilder (под другим профилем), подключаясь ктот же экземпляр Axon Server, что и его создатель.

Проблема, с которой я столкнулся, заключается в том, что обработка событий начинает вести себя странно, я считаю, что любые «общие» обработчики событий в исходном приложении со вторым созданным узлом игнорируются/потерял.Кажется, что все работает нормально, когда экземпляры запускаются вне тестовой среды.

Я думаю, что в тесте два узла в конечном итоге совместно используют имя экземпляра на сервере Axon (так как они совместно используют processId и имя хоста)), что мешает обработчику регистрации / отслеживания.Имеет ли это смысл?

Можно ли вручную установить это значение для узлов, подключающихся к серверу Axon, чтобы этого не происходило во время тестирования?

1 Ответ

0 голосов
/ 08 февраля 2019

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

  1. AxonServer может быть сбит с толку и считает, что эти два компонента на самом деле одинаковы.Действительно, имя хоста и processId для обоих будут одинаковыми, что заставляет AxonServer полагать, что он имеет дело только с несколькими соединениями из одного приложения.Чтобы обойти это, вы можете определить другой clientId, используя свойство axon.axonserver.clientId.Просто установите это случайное значение, и это должно решить эту часть проблемы.
  2. Другая проблема заключается в том, что ваши компоненты могут иметь процессоры отслеживания с одинаковыми именами.В этом случае AxonServer будет рассматривать оба экземпляра процессора как несколько экземпляров одного и того же процессора и балансировать нагрузку между ними (при наличии достаточного количества сегментов).Если у вас есть только один доступный сегмент обработки, тогда будет активен только один обработчик.Другой компонент не получит никаких событий.

    Чтобы обойти это, добавьте в ваши тестовые примеры имена ваших процессоров.Вы можете использовать метод EventProcessingConfigurer assignProcessingGroup(Function<String, String> assignmentRule), чтобы изменить правило назначения групп процессорам.По умолчанию имя процессора совпадает с именем группы.В вашем случае вы могли бы (на основе заданного вами профиля теста) добавить уникальный префикс, связанный с тестом, к имени процессора.Это заставит Аксона поверить, что это разные процессоры, и они должны работать одновременно.

Я бы рекомендовал сначала попробовать вариант 1.Если этого недостаточно для теста, вы можете попробовать и второй.

...