Как использовать разные команды в разных микросервисах с помощью Axon?

У меня есть 2 разных микросервиса todo-service и validation-service и типы команд CreateTodoCommand и ValidateTodoCommand.

Если у меня есть один обработчик команд в одной службе, а другой - во второй, я получаю No node known to accept исключение при отправке команды, о которой служба не знает.

Могу ли я разделить свои @CommandHandler на разные службы?


person Stepan    schedule 15.06.2018    source источник
comment
Их должно быть нормально, если они будут выделены в отдельную службу. С точки зрения границы домена служба проверки должна выполнять только validatePayload (rawInput) и передавать проверенное значение в Todo-Service как CreateTodoCmd (validatedPayload).   -  person Rjk    schedule 16.06.2018


Ответы (1)


Да, это определенно возможно, @Stephan. Предполагая, что вы находитесь в среде Spring Boot, единственное, что вам нужно сделать, это установить правильную зависимость для типа DistributedCommandBus, который вы хотите (например, SpringCloud или JGroups), и установить для свойства axon.distributed.enabled значение true.

Платформа автоматически выполнит поиск всех @CommandHandler аннотированных функций. Если ваше приложение по-прежнему заявляет, что не может найти «узел, ожидающий команды», значит, во время процесса подключения произошел сбой.

Или, проще говоря, я могу придумать две причины: 1) Ваши @CommandHandler аннотированные функции не зарегистрированы в DistributedCommandBus. 2) Информация об обработке сообщений не передается между вашими узлами.

Как бы то ни было, простой ответ на ваш вопрос: да, вы можете использовать свои @CommandHandler аннотированные функции в разных сервисах.

Но почему это не работает, это совсем другое дело.

person Steven    schedule 18.06.2018
comment
Интересно, есть ли у вас где-нибудь на github образец кода для DistributedCommandBus? - person Stepan; 19.06.2018
comment
У меня нет ни одного доступного в открытом доступе, но, как я уже отмечал, настройка в среде Spring Boot должна быть очень простой. Итак, чтобы помочь вам в этом: вы используете Spring Boot? - person Steven; 21.06.2018