J'ai une Saga et la Saga envoie des commandes à différents microservices sur des événements spécifiques. Certains microservices peuvent être en panne plus que d'autres, je veux donc configurer une CommandGateway avec un RetryScheduler et aussi implémenter mon propre IntervalRetryScheduler de sorte que je puisse faire un retry pour chaque RuntimeException mais seulement pour certaines Commandes Axon (ceci a été d'une grande aide). Pourquoi le RetryScheduler d'Axon Framework ne réessaie-t-il pas après une NoHandlerForCommandException ? ).
Tout fonctionne comme prévu, ma seule préoccupation est de savoir s'il y a des problèmes dus au fait que certaines commandes seront envoyées avec la CommandGateway par défaut et d'autres avec ma CommandGateway personnalisée qui a le retry personnalisé intégré ?
Pour l'instant, je n'utiliserais pas la passerelle de commande personnalisée, même pour les commandes sans essai.
J'ai opté pour l'approche distincte des haricots 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;
}