spring-retry для кластерных приложений
У меня есть работа в приложении springboot, которое запускает несколько вызовов отдыха для других приложений Springboot через шаблон отдыха.
У меня есть ситуация, когда шаблон отдыха подключен к центру обработки данных A и каким-то образом во время выполнения задания вызванная служба в центре обработки данных A выходит из строя, тогда мое задание не может подключиться к службе в центре обработки данных B во время повторных попыток:
@DisallowConcurrentExecution
@Slf4j
@CriticalJob
public class MigrationJob extends QuartzJobBean {
@Autowired
private RestTemplate oAuth2RestTemplate;
@Value("${app.dataload.retryAttempts:3}")
private int retryAttempts;
private RetryTemplate retryTemplate = new RetryTemplate();
@PostConstruct
public void init() {
ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
backOffPolicy.setInitialInterval(5000);
retryTemplate.setBackOffPolicy(backOffPolicy);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(retryAttempts);
retryTemplate.setRetryPolicy(retryPolicy);
}
@Override
protected void executeInternal(JobExecutionContext context) {
retryTemplate.execute(a->{processOne(); return null;});
retryTemplate.execute(a->{processTwo(); return null;});
retryTemplate.execute(a->{processThree(); return null;});
}
void processOne() {
/*Some code here*/
oAuth2RestTemplate.put(new UriTemplate(url+"/{id}").expand(p.getId()), p);
}
//processTwo and processThree methods have similar definitions
Теперь проблема в том, что если restTemplate из центра обработки данных B подключен к службе в центре обработки данных A, а центр обработки данных выходит из строя из-за технического обслуживания или сбоя, задание не выполняется. Он не подключается к центру обработки данных B при повторных попытках.
Может кто-нибудь помочь в этом?