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 при повторных попытках.

Может кто-нибудь помочь в этом?

0 ответов

Другие вопросы по тегам