Не могу настроить тайм-аут Feign Client

Я использую Feign Client с отключенным балансировщиком нагрузки.

@FeignClient(name = "my-client", url = "${myHost}", configuration = ClientContext.class)

Таким образом, все свойства ленты игнорируются. Я пытаюсь установить пользовательские тайм-ауты разными способами, но Feign игнорирует их все и выдает TimeoutException через 60 секунд. Способы, которые я пытался использовать: в ClientContext: 1)

@Value("${feign.connectTimeout:10000}")
private int connectTimeout;

@Value("${feign.readTimeOut:300000}")
private int readTimeout;

@Bean
public Request.Options options() {
    return new Request.Options(connectTimeout, readTimeout);
}

2)

@Bean
public Request.Options options() {
    return new Request.Options(10_000, 300_000);
}

в файле bootstrap.properties: 1)

feign.client.default.connect-timeout=10000
feign.client.default.read-timeout=300000

2)

feign.client.default.config.connect-timeout=10000
feign.client.default.config.read-timeout=300000

3)

feign.client.default.connectTimeout=10000
feign.client.default.readTimeout=300000

4)

feign.client.default.config.connectTimeout=10000
feign.client.default.config.readTimeout=300000

Трассировка стека ошибок:

Error Message: feign.RetryableException: Read timed out executing GET http://myrequest...
Stacktrace: 
feign.FeignException.errorExecuting(FeignException.java:67)
feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:10)
feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)

Можете ли вы предложить мне правильную конфигурацию или найти ошибку в блоках кода выше?


person gad_gadskiy    schedule 02.10.2017    source источник
comment
Вероятно, вы используете hystrix с feign, и его тайм-аут по умолчанию равен 1 с.   -  person ByeBye    schedule 02.10.2017
comment
Позже я добавил трассировку стека. Никаких упоминаний о хайстриксе нет. Может ли это быть из-за hystrix в любом случае?   -  person gad_gadskiy    schedule 02.10.2017


Ответы (3)


Правильное решение было

@Value("${feign.connectTimeout:10000}")
private int connectTimeout;

@Value("${feign.readTimeOut:300000}")
private int readTimeout;

@Bean
public Request.Options options() {
    return new Request.Options(connectTimeout, readTimeout);
}

и добавьте в файл .properties этот payer-service-client.feign.hystrix.enabled=false

person gad_gadskiy    schedule 06.10.2017

Существует также способ сделать это только с помощью конфигурации.

Добавьте к application.yml:

feign:
  client:
    config:
      my-client:
        connectTimeout: 10000
        readTimeout: 300000
person Amit Goldstein    schedule 23.01.2020

Я думаю, что вы неправильно используете атрибут default.

Правильный способ использования свойств тайм-аута по умолчанию:

feign.client.config.default.connectTimeout=xxxx
feign.client.config.default.readTimeout=xxxx

Они будут применимы для всех фиктивных клиентов. Если вы хотите применить его к конкретному клиенту, вы можете обратиться к другим ответам.

person Deepak Shinde    schedule 14.04.2021