controller 层
@ApiOperation("数据迁移")
@PostMapping("/tenantMigrate")
public void tenantMigrate(@Valid @RequestBody TenantMigrateDto tenantMigrateDto, BindingResult bindingResult) {
poolExecutor.execute(() -> {
TenantMigrateResultDto resultDto = new TenantMigrateResultDto();
try {
//发送失败次数
AtomicInteger errorNum = new AtomicInteger(ICommonConstants.INT_FALSE);
//租户数据迁移结果信息
doPostPv(resultDto, errorNum);
} catch (Exception exception) {
//发送失败次数
AtomicInteger errorNum = new AtomicInteger(ICommonConstants.INT_FALSE);
//租户数据迁移结果信息
doPostPv(resultDto, errorNum);
}
});
}
失败重试调用
private void doPostPv(TenantMigrateResultDto resultDto, AtomicInteger errorNum) {
//重试3次结束
if (errorNum.get() > 2) {
log.error("数据迁移失败3次结束通知tenantMigrate.doPostPv resultDto = {}", JSON.toJSONString(resultDto));
return;
}
try {
String reqUrl = pvService + ICommonConstants.PV_URI;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity entity = new HttpEntity<>(resultDto, headers);
ParameterizedTypeReference<ActionResult<Object>> typeReference = new ParameterizedTypeReference<ActionResult<Object>>() {};
ResponseEntity<ActionResult<Object>> responseEntity = restTemplate.exchange(reqUrl, HttpMethod.POST, entity, typeReference);
log.info("调用第三方服务返回结果:{}", JSON.toJSONString(responseEntity));
} catch (Exception exception) {
errorNum.addAndGet(ICommonConstants.INT_TRUE);
doPostPv(resultDto, errorNum);
}
}