Хотя с другим типом возвращаемого значения механизм аварийного возврата Spring работает нормально, но когда дело доходит до вызова API с возвращаемым типом void. Метод восстановления не вызывается вообще, я попытался со всеми возможными типами параметров метода и изменил тип возвращаемого значения резервного метода .... Есть ли какой-нибудь способ сделать это? Я не понимаю, почему у аннотации @CircuitBReaker нет параметра, чтобы принимать имя запасного метода, переданное ему в качестве значения?
@CircuitBreaker(maxAttempts = 3, openTimeout = 8000, resetTimeout = 15000)
public Void callingXYZ(final Abc abc, final Cdf cdf) {
return retryTemplate.execute(context -> {
log.info("Retry count={} when calling ******", context.getRetryCount());
AbcServiceImpl.this.update*****Settings(OrgId.fromString(abc.getUUID(), cdf.getData());
return null;
});
}
//Recover method that should get invoked
@Recover
public Void fallbackUpdate*****(Throwable e, Abc abc) throws Throwable{
log.info("Inside fallback");
if (e instanceof ClientException) {
log.warn("Fallback method is called when trying to call ******** from ****** because of {}", e.getCause());
//Rollback in the db based on the method attributes
throw SpecificException.forTask(HttpStatus.SERVICE_UNAVAILABLE.value(),
Enum.NAME.getErrorCode(),
Enum.NAME.getMEssage(), true);
}
throw e;
}