Мне было интересно, есть ли разница при использовании аннотации @HysterixCommand для метода, который возвращает DeferredResult поверх метода, который сразу возвращает объект? Вот пример моего кода
@HystrixCommand(fallbackMethod = "getAlertsFallbackMethod")
public DeferredResult<List<AlertsBodyVO>> getAlerts(String userId) {
LOGGER.info("Entered getAlerts - userId:{}", userId);
final DeferredResult<List<AlertsBodyVO>> alertsDeferredResult = new DeferredResult<>();
try {
String requestURI = alertsEndpoint + userId.toUpperCase();
LOGGER.info("requestURI:{}", requestURI);
HttpHeaders headers = buildHttpHeader(userName, password);
LOGGER.info("headers:{}", headers);
HttpEntity<String> request = new HttpEntity<>(headers);
LOGGER.info("request:{}", request);
ResponseEntity<AlertsResponseVO> responseEntity = syncRestTemplate.exchange(requestURI, HttpMethod.GET, request, AlertsResponseVO.class);
LOGGER.info("responseEntity:" + responseEntity);
List<AlertsBodyVO> alertsBodyList = Arrays.asList(responseEntity.getBody().getAlertsBody());
alertsDeferredResult.setResult(alertsBodyList);
} catch (final RestClientException rce) {
LOGGER.error("ServiceImpl::getAlerts: failed for user__{}, --Cause::", userId, rce);
ErrorResponseVO alertsResponse = new ErrorResponseVO();
alertsResponse.setErrorMessage("ServiceImpl::getAlerts: failed for user__" + userId );
alertsDeferredResult.setErrorResult(alertsResponse);
}
LOGGER.info("Exiting:{}", alertsDeferredResult);
return alertsDeferredResult;
}
public DeferredResult<List<AlertsBodyVO>> getAlertsFallbackMethod(String userId) {
final DeferredResult<List<AlertsBodyVO>> alertsDeferredResult = new DeferredResult<>();
LOGGER.info("CircuitBreaker:Fallback method for getAlerts returning empty object::userId: {}",userId);
return alertsDeferredResult;
}
Сразу после этой строки
ResponseEntity<AlertsResponseVO> responseEntity = syncRestTemplate.exchange(requestURI, HttpMethod.GET, request, AlertsResponseVO.class)
Резервный метод вызывается через 1 секунду.
Я вижу в журналах, что restTemplate завершается успешно.
Для Hysterix - я использую настройки по умолчанию, и это отлично работает для меня в других методах, которые возвращают объекты.
Если кто-то может предложить какое-либо понимание этого поведения, это будет высоко ценится.