@FeignClient всегда тайм-аут при использовании идентификатора сервиса eureka - PullRequest
0 голосов
/ 08 июня 2018

У меня есть приложение с пружинной загрузкой, которое использует декларативный клиент Feign

@ComponentScan
@EnableFeignClients
@EnableCircuitBreaker
@EnableDiscoveryClient
@EnableZuulProxy
@FeignClient(name = "${service-registry-name}", fallbackFactory = MyFallbackFactory.class, configuration = CommonFeignConfiguration.class)
public interface MyClient {

    @RequestMapping(method = RequestMethod.GET, path = "/test/reference/data")
    HttpEntity<String> getAllData();}

У меня есть следующее application.yml

feign:
  okhttp:
    enabled: true

feign:
  hystrix:
    enabled: true

hystrix:
  command:
    MyClient#getAllData():
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false


logging:
  level:
    project:
      user:
        MyClient: DEBUG

feign:
  client:
    config:
      feign-name:
        requestInterceptors: com.test.MyRequestHeaderProcessor

Это приложение с весенней загрузкой отлично работает, и когда яотладка я мог видеть, что значение тайм-аута 30000 правильно применяется.

Проблема начинается, когда я использую этот код НЕ в качестве отдельного приложения с пружинной загрузкой, а в качестве jar зависимости в другом проекте.

В это время тайм-аут всегда равен 1000, что является значением по умолчанию.Мне тоже удалось это переопределить.Но, несмотря на это, я получаю HystrixRunTimeException, Timeout with null.

У меня есть feign.hystrix.enabled = true.

Если я использую feign.hystrix.enabled = false, я вижу, чтоМой запрос не истекает, но тогда механизм Fallback не работает.

Но, когда я добавляю атрибут URL в FeignClient, он работает нормально и НЕ работает по таймауту. Я не могу полагаться на атрибут URL, так как он исходит изURL службы облачного литейного производства, который можно изменить.

1 Ответ

0 голосов
/ 06 декабря 2018

Добавьте следующие свойства в файл Application.yml.

feign:
  client: 
    config: 
      default:
         connectTimeout: 80000000
         readTimeout: 80000000
...