У меня есть сага, и сага отправляет команды в разные микросервисы при определенных событиях. Некоторые из микросервисов могут быть недоступны в большей степени, чем другие, поэтому я хочу настроить CommandGateway с помощью RetryScheduler, а также реализовать свой собственный IntervalRetryScheduler, чтобы я мог повторять попытку для каждого RuntimeException, но только для некоторых команд Axon (это было большая помощь Почему RetryScheduler в Axon Framework не пытается повторить попытку после исключения NoHandlerForCommandException?).
Все работает, как ожидалось, меня беспокоит только то, что есть какие-либо проблемы, связанные с тем, что некоторые команды будут отправлены с помощью CommandGateway по умолчанию, а некоторые - с моим настраиваемым CommandGateway, в который встроена настраиваемая повторная попытка?
На данный момент я бы не стал использовать пользовательский CommandGateway даже для команд без повторной попытки.
Я пошел с отличным подходом к бобам CommandGateway
@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;
}