我在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。
有人可以帮忙吗?