0

我在springboot应用程序中有一份工作,它通过rest模板触发对其他springboot应用程序的多个rest调用。

我有一种情况,如果休息模板连接到数据中心 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

现在的问题是,如果来自数据中心 B 的 restTemplate 连接到数据中心 A 中的服务,并且数据中心由于维护或中断而停机,那么作业就会失败。在重试时它不会连接到数据中心 B。

有人可以帮忙吗?

4

0 回答 0