目前,我不会使用自定义CommandGateway,即使是不重试的命令
我使用了不同的CommandGateway bean方法
@Bean
public CommandGateway commandGateway(){
Configurer configurer = DefaultConfigurer.defaultConfiguration();
CommandBus commandBus = configurer.buildConfiguration().commandBus();
CommandGateway commandGateway = DefaultCommandGateway.builder().commandBus(commandBus).build();
return commandGateway;
}
@Bean
public CommandGateway commandGatewayWithRetry(){
Configurer configurer = DefaultConfigurer.defaultConfiguration();
CommandBus commandBus = configurer.buildConfiguration().commandBus();
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
RetryScheduler rs = IntervalRetrySchedulerImpl.builder().retryExecutor(scheduledExecutorService).maxRetryCount(5).retryInterval(1000).build();
CommandGateway commandGateway = DefaultCommandGateway.builder().commandBus(commandBus).retryScheduler(rs).build();
return commandGateway;
}
从这里开始,你可以从几个角度出发。
如果设置为使用RetryScheduler
/CommandGateway
思想,则可以执行以下任一操作。
commandgateway
bean,或者使用我们的bean,而不使用RetryScheduler
RetryScheduler
可以调整为重试yes或No。但是,我认为在Axon Usergroup的这篇文章中建议的解决方案在您的情况下更值得遵循。总结一下建议的方法,这个想法是通过使用Axon提供的最后期限机制来安排Saga本身的重试。
这样,如果微服务不可用(我假设这就是您试图解决的问题),您就可以让命令失败,并在一定时间后让Saga本身重试操作。
希望这能帮到你!
我正在研究Axon框架,我很难理解命令状态的自动持久性。 我已经查看了有关命令模型存储库的文档,根据我的理解,只要有正确的依赖关系,标准存储库的命令模型的状态应该是自动持久化的。这种观点也出现在我看过的另一篇博客/教程中(您可能需要向下滚动到存储库部分)。 更新 根据Steven的注释(以及随后的注释),我决定尝试并实现一个状态存储的聚合,但是我发现聚合的(de)序列化存在一个问题。我已经将聚合发
让我们举一个电子邮件传奇的例子:当一个用户注册时,我们创建一个发布UserRegisterEvent的用户聚合,一个传奇将被创建,这个传奇负责确保注册电子邮件被发送给用户(电子邮件可能包含验证密钥、欢迎消息等)。 我们是否应该使用: > 用try/catch->缩放吗? 使用deadline是因为我们只使用“send”,而不处理命令的最终错误,这可能是发送失败(其他服务关闭,等等) 其它的呢? 还
我试图使用Axon 4.1+中的在一个2 JVM node K8集群上重播事件。虽然我将它设置为清理事件,但它只从一个节点中提取事件,而另一个节点继续运行,因为它的跟踪事件仍然是活动的。 我如何在所有JVM上同时禁用它,以便它能够正确地重播?然后启用所有这些命令,继续处理命令。 我尝试通过这段代码增加线程,这导致了另一个问题,即现有的令牌在InitialSemgmentsCount中永远不会增加,
null 我想要达到的目标 我希望由一个实例发布的事件只由同一个实例处理 如果instance1发布eventX,那么只有instance1应该处理eventX null
任何关于如何做到这一点的文件都将不胜感激。 提前谢了。