实施 EventProcessingConfigurer、registerErrorHandler 以正确处理@EventHandler 错误
Implementing EventProcessingConfigurer,registerErrorHandler to properly handle @EventHandler errors
我正在尝试通过 EventProcessingConfigurer.registerErrorHandler() 方法添加一个 ErrorHandler,当它显示在配置上时,class 本身没有被调用。
我目前正在使用 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 中放置日志语句被正确调用。
ErrorHandler
的任务是处理与您预期不同的异常。
在处理事件时,Axon Framework 推导出两层:
- 内部
EventProcessor
层
- 框架用户编写的事件处理组件
EventProcessor
中抛出的异常由您配置的 ErrorHandler
处理。
要自定义处理来自您自己的事件处理程序的异常的过程,您
将必须配置 ListenerInvocationErrorHandler
.
要配置 general/default ListenerInvocationErrorHandler
,您可以在第一个代码段中使用以下方法:
EventProcessingConfigurer#registerDefaultListenerInvocationErrorHandler(
Function<Configuration, ListenerInvocationErrorHandler>
)
您还可以在 this 页面查看 Axon 的参考指南,了解更多信息。
希望这可以帮助你@sherring!
我正在尝试通过 EventProcessingConfigurer.registerErrorHandler() 方法添加一个 ErrorHandler,当它显示在配置上时,class 本身没有被调用。
我目前正在使用 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 中放置日志语句被正确调用。
ErrorHandler
的任务是处理与您预期不同的异常。
在处理事件时,Axon Framework 推导出两层:
- 内部
EventProcessor
层 - 框架用户编写的事件处理组件
EventProcessor
中抛出的异常由您配置的 ErrorHandler
处理。
要自定义处理来自您自己的事件处理程序的异常的过程,您
将必须配置 ListenerInvocationErrorHandler
.
要配置 general/default ListenerInvocationErrorHandler
,您可以在第一个代码段中使用以下方法:
EventProcessingConfigurer#registerDefaultListenerInvocationErrorHandler(
Function<Configuration, ListenerInvocationErrorHandler>
)
您还可以在 this 页面查看 Axon 的参考指南,了解更多信息。 希望这可以帮助你@sherring!