当前位置: 首页 > 知识库问答 >
问题:

OpenFeign+Hystrix-不同客户端的不同超时时间

幸弘扬
2023-03-14

在我的Spring Boot应用程序中,Hystrix与Feign一起工作。

feign:
  hystrix:
    enabled: true

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 10000
feign:
  client:
    config:
      HeavyClient:
        connectTimeout: 30000
        readTimeout: 30000

我在使用:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

如有任何帮助,不胜感激,谢谢!

共有1个答案

公羊奇
2023-03-14

经过仔细搜索和深入搜索,我发现Hystrix命令的缺省命名有些难看,比如interfacename#methodnamesignature()

因此,例如,给定以下@FeignClient:

@FeignClient(name = "heavyClient", url = "${heavyclient.url}")
public interface HeavyClient {
    
    @RequestMapping("/process/{operation}")
    public ResponseEntity<Response> process(@PathVariable("operation") String operation);
    
}

它将被配置为:

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000
    HeavyClient#process(String):
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000

不幸的是,这对我不起作用...不知道为什么...=s所以为了解决这个问题,我注册了一个setterFactory类型的bean,它将创建给定@FeignClient名称的命令键:

    @Bean
    public SetterFactory setterFactory() {
        return (target, method) -> HystrixCommand.Setter
                .withGroupKey(HystrixCommandGroupKey.Factory.asKey(target.name()))
                .andCommandKey(HystrixCommandKey.Factory.asKey(target.name()));
    }

然后我可以简单地使用这样的配置:

hystrix:
  command:
    heavyClient:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000
 类似资料:
  • 当使用包含Ribbon客户端的Hystrix命令时,您需要确保您的Hystrix超时配置为长于配置的Ribbon超时,包括可能进行的任何潜在的重试。例如,如果您的Ribbon连接超时为一秒钟,并且Ribbon客户端可能会重试该请求三次,那么您的Hystrix超时应该略超过三秒钟。 如何包含Hystrix仪表板 要在项目中包含Hystrix仪表板,请使用组org.springframework.cl

  • 我有一个客户端服务器的情况,每一方都在测量时间,但似乎有一个问题,即测量的时间不匹配。长话短说,这个想法是有一个倒计时,之后程序需要做事情。我在服务器端测量这个。但是,倒计时需要显示,所以我所做的是在客户端单独运行它。最终结果是,当服务器发送消息时,客户端显示为23秒,该消息表明时间倒计时为10分钟。 客户端为XNA,代码: 然后从可用时间中减去计时器,并显示出来。在服务器端,这种情况正在发生:

  • rest客户端从不超时。在多个请求之后,quarkus停止服务新的请求。也尝试了.../mp-rest/connecttimeout=5000.../mp-rest/readtimeout=5000但没有成功。 界面看起来像

  • 我正在使用 spring-security-oauth2 来实现我的 OAuth2 授权服务器。spring-security-oauth2 即将消失,我知道我需要用 spring-authorization-server 替换它 问:是否可以为不同的客户端设置不同的令牌到期时间(此处客户端表示客户端 ID/客户端密钥对)? 如果是,您能否分享有关 的文档/示例代码? 如果不是,它是Spring-

  • VB.NET客户端以不同的方式解释Oracle11g服务器的时间戳。我用的是VS2010,VB.NET,11.2.0.30驱动程序,Win XP在客户端机器上。 这两台机器上的软件是相同的,用户在服务器上拥有相同的权限。 当我使用每个用户的凭据通过toad登录并从dual中选择SYSDATE时;我得到YYYY-MM-DD hh24:mi:ss格式。 通过我的应用程序,当我做一个选择SYSDATE从