web-dev-qa-db-ja.com

タイムアウトFeignClientを解決する方法

FeignClientを使用してSQL Serverでクエリを実行するサービスを使用すると、アプリケーションでエラーが発生します。

エラー:

スレッド "pool-10-thread-14" feign.RetryableExceptionの例外:GETの実行がタイムアウトしました http://127.0.0.1:8876/processoData/search/buscaProcessoPorCliente?cliente=ELEKTRO+-+TRABALHISTA&estado=SP

私の消費者サービス:

@FeignClient(url="http://127.0.0.1:8876")
public interface ProcessoConsumer {

@RequestMapping(method = RequestMethod.GET, value = "/processoData/search/buscaProcessoPorCliente?cliente={cliente}&estado={estado}")
public PagedResources<ProcessoDTO> buscaProcessoClienteEstado(@PathVariable("cliente") String cliente, @PathVariable("estado") String estado);

}

私のYML:

server:
  port: 8874

endpoints:
  restart:
    enabled: true
  shutdown:
    enabled: true
  health:
    sensitive: false

eureka:
  client:
  serviceUrl:
    defaultZone: ${vcap.services.eureka-service.credentials.uri:http://xxx.xx.xxx.xx:8764}/eureka/
  instance: 
    preferIpAddress: true

ribbon:
  eureka:
    enabled: true

spring:
  application:
    name: MyApplication
  data:
    mongodb:
      Host: xxx.xx.xxx.xx
      port: 27017
      uri: mongodb://xxx.xx.xxx.xx/recortesExtrator
      repositories.enabled: true
    solr:
      Host: http://xxx.xx.xxx.xx:8983/solr
      repositories.enabled: true

誰もこれを解決する方法を知っていますか?

ありがとう。

12
Renan Lalier

Application.propertiesファイルに以下のプロパティを追加します。

feign.client.config.default.connectTimeout: 160000000
feign.client.config.default.readTimeout: 160000000
15
chaitanya dalvi

同様にこの問題に遭遇しました。 @spencergibbが示唆するように、ここで私が使用している回避策があります。 link を参照してください

これらをapplication.propertiesに追加します。

# Disable Hystrix timeout globally (for all services)
hystrix.command.default.execution.timeout.enabled: false

# Increase the Hystrix timeout to 60s (globally)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000

これをJava構成クラスに追加します。

import feign.Request;

@Configuration
@EnableDiscoveryClient
@EnableFeignClients(basePackageClasses = { ServiceFeignClient.class })
@ComponentScan(basePackageClasses = { ServiceFeignClient.class })
public class FeignConfig {

    /**
     * Method to create a bean to increase the timeout value, 
     * It is used to overcome the Retryable exception while invoking the feign client.
     * @param env,
     *            An {@link ConfigurableEnvironment}
     * @return A {@link Request}
     */
    @Bean
    public static Request.Options requestOptions(ConfigurableEnvironment env) {
        int ribbonReadTimeout = env.getProperty("ribbon.ReadTimeout", int.class, 70000);
        int ribbonConnectionTimeout = env.getProperty("ribbon.ConnectTimeout", int.class, 60000);

        return new Request.Options(ribbonConnectionTimeout, ribbonReadTimeout);
    }
}
3
Sudhakar
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000
ribbon.ReadTimeout=60000
ribbon.ConnectTimeout=60000

リボンのタイムアウトがhystrixよりも大きいことを確認してください

2
stayfool

私はFeign.builder()を使用して、Feignクライアントをインスタンス化します。

connectTimeoutreadTimeoutを設定するには、次を使用します。

Feign.builder()
     ...
     .options(new Request.Options(connectTimeout, readTimeout))
     .target(MyApiInterface.class, url);

これを使用して、異なるAPIに異なるタイムアウトを設定できます。

2
yunandtidus

eureka:クライアント:eureka-server-read-timeout-seconds:30

0

これを見てください answer 。それは私のためにトリックをしました。また、少し調査を行ったところ、ここでプロパティのドキュメントを見つけました。

https://github.com/Netflix/Hystrix/wiki/Configuration#intro

0
Marco Tedone