Реализация EventProcessingConfigurer,registerErrorHandler для правильной обработки ошибок @EventHandler

Я пытаюсь добавить ErrorHandler с помощью метода EventProcessingConfigurer.registerErrorHandler(), и пока он отображается в конфигурации, сам класс не вызывается.

В настоящее время я использую Axon 4.1.1 (без сервера Axon) и Spring Boot 2.1.6.RELEASE.

я взял за основу свой код github/AxonFramework, но это не так.

Конфигурация:

@Autowired
public void configure(final EventProcessingConfigurer config) {
    TestErrorHandler testErrorHandler = new TestErrorHandler();
    config.registerErrorHandler("SolrProjection", configuration -> testErrorHandler);
}

Обработчик ошибок:

public class TestErrorHandler implements ErrorHandler, ListenerInvocationErrorHandler {
    @Override
    public void handleError(final ErrorContext errorContext) throws Exception {
        System.out.println("TestErrorHandler.handleError()");
    }

    @Override
    public void onError(final Exception exception, final EventMessage<?> event, final EventMessageHandler eventHandler) {
        System.out.println("TestErrorHandler.onError()");
    }
}

Проекция:

@Configuration
@RequiredArgsConstructor
@ProcessingGroup("SolrProjection")
public class SolrProjection {
    @EventHandler
    public void onEvent(final TestEvent event,
                        @SequenceNumber Long sequenceNumber,
                        @Timestamp final Instant requestTimestamp,
                        @MessageIdentifier final String messageIdentifier,
                        final MetaData metaData) {
        if (true) {
            throw new IllegalStateException();
        }
    }

даже если я прямо выдаю ошибку, я никогда не вижу два system.out в консоли. и размещение операторов журнала в @EventHandler вызывается правильно.


person sherring    schedule 09.08.2019    source источник
comment
Для текущей версии Axon 4.5 ссылка docs.axoniq.io/reference-guide/v/4.5/axon-framework/events/   -  person Frank Wesemann    schedule 12.05.2021


Ответы (1)


ErrorHandler поручено работать с исключениями, отличными от ожидаемых. Когда дело доходит до обработки событий, Axon Framework выделяет два уровня:

  1. Внутренний слой EventProcessor
  2. Компоненты обработки событий, написанные пользователями фреймворка

Исключения, возникающие в EventProcessor, обрабатываются настроенным вами ErrorHandler. Для настройки процесса обработки исключений из ваших собственных обработчиков событий вам необходимо настроить файл ListenerInvocationErrorHandler.

Чтобы настроить общий/по умолчанию ListenerInvocationErrorHandler, вы можете использовать следующий метод в своем первом фрагменте:

EventProcessingConfigurer#registerDefaultListenerInvocationErrorHandler(
        Function<Configuration, ListenerInvocationErrorHandler>
)

Вы также можете ознакомиться со Справочным руководством Axon по адресу на этой странице для получения дополнительной информации об этом. Надеюсь, это поможет вам @sherring!

person Steven    schedule 12.08.2019
comment
Еще раз спасибо, Стивен, я неправильно прочитал (снова) и имеет смысл, что registerListenerInvocationErrorHandler — это то, что я должен был делать вместо уровня фреймворка. я изменил, чтобы использовать это в своей конфигурации, и он действительно входит в этот метод, чтобы показать, что он перехватывает указанное исключение. - person sherring; 12.08.2019
comment
Рад слышать, что это помогло @sherring! И, неправильное прочтение чего-то может случиться к лучшему не так ли? Вот почему существуют такие форумы, если вы спросите. - person Steven; 13.08.2019
comment
Привет @steven, у тебя есть пример этой конфигурации для Axon 2.4? - person caytekin; 11.05.2020
comment
Поскольку мои дни Axon 2 отстают от меня примерно на 7 лет, мне пришлось искать это в справочном руководстве. Я предлагаю сделать то же самое с вашей стороны, если вам нужно знать подробности по этому вопросу. Определенно многое из текущего будущего в Axon 4 (и 3, если уж на то пошло) нет в Axon 2. Поэтому я настоятельно рекомендую перейти на более новую версию фреймворка @caytekin. Несмотря на это, в этой части справочного руководства немного рассказывается об обработке ошибок для кластеров (т. е. в настоящее время называемых процессорами событий) в Axon 2 —> legacy-docs.axoniq.io/reference-guide/v/2.4/ - person Steven; 12.05.2020