当前位置: 首页 > 知识库问答 >
问题:

为什么Axon框架中的RetryScheduler在NoHandlerForCommandException之后不重试?

蒙麒
2023-03-14

这是我对带有RetryScheduler的commandGateway的配置:

@Bean
public CommandGateway commandGateway(){

    Configurer configurer = DefaultConfigurer.defaultConfiguration();

    CommandBus commandBus = configurer.buildConfiguration().commandBus();

    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
    RetryScheduler rs = IntervalRetryScheduler.builder().retryExecutor(scheduledExecutorService).maxRetryCount(100).retryInterval(1000).build();
    CommandGateway commandGateway = DefaultCommandGateway.builder().commandBus(commandBus).retryScheduler(rs).build();

    return commandGateway;
}

共有1个答案

柴修筠
2023-03-14

为了解决手头的问题,您可以提供intervalretryScheduler的自己的实现,该实现重写intervalretryScheduler#isexplicitlynontransistal(Throwable)方法,以同时考虑重试noHandlerforCommandException

注意,intervalretryScheduler有意只对AxonNontransientException类型的异常重试,这些异常通常是信号可恢复的异常。NoHandlerforCommandException意味着正在使用的CommandBus实现也不知道向谁发出命令,这通常意味着不能重试。

然而,似乎你有一个有意义的场景。因此,正如我在开始时指出的那样,重写IsexplicitlyNontransient(Throwable)方法以排除NoHandlerForCommandException将是我认为适合您的方法。

 类似资料:
  • 我试图使用Axon 4.1+中的在一个2 JVM node K8集群上重播事件。虽然我将它设置为清理事件,但它只从一个节点中提取事件,而另一个节点继续运行,因为它的跟踪事件仍然是活动的。 我如何在所有JVM上同时禁用它,以便它能够正确地重播?然后启用所有这些命令,继续处理命令。 我尝试通过这段代码增加线程,这导致了另一个问题,即现有的令牌在InitialSemgmentsCount中永远不会增加,

  • 为什么如果我将框架的宽度和高度设置为400,例如,可用空间较小,我如何围绕它工作,以及如何在不剪切内容的情况下将某些内容放在中心?例如

  • 所以基本上我有一个动态添加和删除片段的浏览器。我要做的是在片段中设置onClick函数,并执行与该片段相关的操作。以下是我的代码。 MainFragment.java } 然后我在Fragment的xml中使用了OnClick属性,并在我的MainActivity中创建了一个函数,这也不起作用。 我错过了什么?

  • 问题内容: HTML从早期开始就有框架,但是在最新版本中已弃用。许多浏览器(我曾尝试使用Internet Explorer)甚至无法正确显示框架。 为什么要这样做?镜框的缺点是什么? 问题答案: 雅各布·尼尔森(JakobNielsen)在1996年的专栏批评镜框。一些关键点: 框架会阻止用户正确标记页面。加载带有书签的框架集页面时,用户先前在框架内单击鼠标没有关系。仅保存外部URL,用户必须导航

  • exception$10(errorcode.java:88)在org.axonframework.axonserver.connector.errorcode.convert(errorcode.java:182)在org.axonframework.axonserver.connector.command.command.command.axonservercommandbus$1.onnex