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

使用Netflix Feign和Hystrix设置请求超时

鲁淇
2023-03-14

我正在使用feign创建一个REST客户端。我有我的电话工作,但我想添加一些超时支持,我有一段时间,弄清楚如何做到这一点。

Feign的文档中说:“要将Hystrix与Feign一起使用,请将Hystrix模块添加到类路径中,然后使用HystrixFeign构建器。”好了,现在我有了这个:

service = HystrixFeign.builder()
                    .decoder(new GsonDecoder())
                    .target(ProjectService.class, URL_TO_BE_MOVED_TO_PROPS);

现在我的所有方法都在返回HystrixCommands,我可以执行或排队,但仍然看不到如何配置它们。

public HystrixCommandInstance(int id) {
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
        .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
               .withExecutionTimeoutInMilliseconds(500)));
this.id = id;

但是我的命令是通过假装构建/返回的,所以我没有访问构造函数的权限。

还有一点值得注意的是,Feign-Hystrix自述文件(https://github.com/netflix/Feign/tree/master/Hystrix)说“要将Hystrix与Feign一起使用,请将Hystrix模块添加到您的类路径中。然后,配置Feign以使用HystrixInvocationHandler”,但Google搜索HystrixInvocationHandler时,我发现了一个非Netflix的回购。即使我使用了它,我也不知道如何配置Feign来使用它。

请告诉我,我是一个哑巴,这是超级简单的,这将使我感到高兴,我过去了这个问题,并感到羞耻,因为不能解决它自己。

TL;DR:我想对我的假客户提出的请求设置超时。怎么样?

共有1个答案

蒋骏
2023-03-14

结果表明,您可以使用com.netflix.config.ConfigurationManager的实例(来自com.netflix.archaius:archaius-core)设置Hystrix属性。

Feign将方法名用作HystrixCommandKeys,因此您可以使用这些名称访问它们的属性:

    ConfigurationManager.getConfigInstance().setProperty("hystrix.command." + methodName + ".execution.isolation.thread.timeoutInMilliseconds", 1500);

这是假设您已经使用HystrixFeign来构造您的客户机,它将每个调用包装在HystrixCommand对象中。

private void configureHystrix() {
    Method[] methods = ProjectService.class.getMethods();

    String methodName;
    for(int i = 0; i < methods.length; i++) {
        methodName = methods[i].getName();
        ConfigurationManager.getConfigInstance().setProperty(String.format("hystrix.command.%s.execution.isolation.thread.timeoutInMilliseconds", methodName), config.getTimeoutInMillis());
    }
}
 类似资料:
  • 问题内容: 我需要为我们对服务(而非Web服务)发出的Http请求设置超时。我们正在使用Apache HTTP客户端。我添加了这两行代码,以根据请求和对服务的响应设置超时时间。 1)目前,我已将超时设置为10秒,因为我几乎立即从服务中看到了响应。我应该增加还是减少时间? 2)如果响应时间超过10秒,会发生什么?它会抛出异常吗?它将是什么异常?我还需要添加其他内容来设置以下代码中的超时时间。 问题答

  • 这个任务用于展示如何使用Istio在Envoy中设置请求超时。 开始之前 遵循安装指南 的指导安装Istio。 部署BookInfo 示例程序。 执行如下命令,初始化基于应用版本的路由。 istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml 注意:本任务假设在Kubernetes上部署这一应用。所有涉及的命令都使用的是K

  • 问题内容: 我有多个IP可以上网。我正在请求选择界面。在这种情况下,我应该如何设置标题? 通常,头是以这种方式设置的: 但是无法弄清楚如何将它们设置为我的代码。 我想它们必须放在或中的某个位置。但是到底如何呢? 我的完整代码: 问题答案: 创建一个请求: 设置标题: 使用问题中配置的方式运行请求: 按照问题所示处理响应。

  • 问题内容: 我一直在努力解决这个问题几天。根据CORS请求设置Cookie。我看到了相互矛盾的文章和答案,有人说,只要XHR请求设置为true,并且服务器发送适当的标头,浏览器就应该尊重标头。但是,在我的测试中情况并非如此。 示例代码: index.js(Node.js服务器) cookies.html 我已经尝试在Firefox Developer Edition和Chrome上对此进行测试,除

  • 如何使用Apache http pClient 4.3和PoolingHttpClientConnectionManager,并为每个请求传递ConnectTimeOut和ReadTimeOut。 例如,如果我将CloseableHttpClient作为Singleton,并使用PoolingHttpClientConnection来获取连接,对于我发出的每个请求,我希望根据目标主机发送不同的超时

  • 我有以下代码: 我想删除脚本,我尝试使用c: set与不同的范围,但它不起作用。是否可以使用JSTL标签设置请求属性? 我试过了,但没有成功: 而且还 之后有一个包括: 显然,在包含的JSP中,请求属性不可见。