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

网飞丝带和Hystrix超时

锺离晗昱
2023-03-14

我们在项目中使用Spring cloud。我们有几个微服务,每个服务都有自己的。yml文件。

以下属性仅在zuul服务器中

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000

    ribbon: 
     ConnectTimeout: 3000
     ReadTimeout: 60000
@RequestMapping(value = "/accountholders/{cardHolderId}/accounts", produces = "application/json; charset=utf-8", method = RequestMethod.GET)
    @ResponseBody
    public AllAccountsVO getAccounts(@PathVariable("cardHolderId") final String cardHolderId,
            @RequestHeader("userContextId") final String userContextId,
            @RequestParam final MultiValueMap<String, String> allRequestParams, final HttpServletRequest request) {

        return iAccountService.getCardHolderAccountsInfo(cardHolderId, userContextId, request, allRequestParams,
                ApplicationConstants.ACCOUNTHOLDER);
    }
@RequestMapping(value = "/internal/userassociationstatus", produces = "application/json; charset=utf-8", consumes = "application/json", method = RequestMethod.GET)
    @ResponseBody
    public UserAssociationStatusVO getUserAssociationStatus(@RequestParam final Map<String, String> allRequestParams) {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return iUserAssociationsService.getUserAssociationStatus(allRequestParams);
    }

下面是我在关联服务中得到的错误

org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:393) ~[tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:426) ~[tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:342) ~[tomcat-embed-core-8.0.30.jar:8.0.30]

以下是我在帐户服务中得到的错误

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://USERASSOCIATIONS-V1/user/v1/internal/userassociationstatus?cardholderid=123&usercontextid=222&role=ACCOUNT": com.sun.jersey.api.client.ClientHandlerException: java.net.SocketTimeoutException: Read timed out; nested exception is java.io.IOException: com.sun.jersey.api.client.ClientHandlerException: java.net.SocketTimeoutException: Read timed out
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:607) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475) ~[spring-web-4.2.4.RELEASE.jar:4.2.4.RELEASE]

如果我保持睡眠时间为4500,它会给我响应,但如果是>=4800,它会抛出上面的异常。我想这与功能区超时无关,而是其他一些东西。任何特定原因导致上述异常后的某一点。

测试2

@RequestMapping(value = "/accountholders/{cardHolderId}/accounts", produces = "application/json; charset=utf-8", method = RequestMethod.GET)
    @ResponseBody
    public AllAccountsVO getAccounts(@PathVariable("cardHolderId") final String cardHolderId,
            @RequestHeader("userContextId") final String userContextId,
            @RequestParam final MultiValueMap<String, String> allRequestParams, final HttpServletRequest request) {

        try {
            Thread.sleep(75000);
        } catch (InterruptedException ex) {
            // TODO Auto-generated catch block
            ex.printStackTrace();
        }
        return iAccountService.getCardHolderAccountsInfo(cardHolderId, userContextId, request, allRequestParams,
                ApplicationConstants.ACCOUNTHOLDER);
    }
com.netflix.zuul.exception.ZuulException: Forwarding error
    at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:134) ~[spring-cloud-netflix-core-1.1.0.M5.jar:1.1.0.M5]
    at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:76) ~[spring-cloud-netflix-core-1.1.0.M5.jar:1.1.0.M5]
    at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112) ~[zuul-core-1.1.0.jar:1.1.0]
    at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:197) ~[zuul-core-1.1.0.jar:1.1.0]


Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: useraccounts-v1RibbonCommand timed-out and no fallback available.
    at com.netflix.hystrix.AbstractCommand$16.call(AbstractCommand.java:806) ~[hystrix-core-1.4.23.jar:1.4.23]
    at com.netflix.hystrix.AbstractCommand$16.call(AbstractCommand.java:790) ~[hystrix-core-1.4.23.jar:1.4.23]
    at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$1.onError(OperatorOnErrorResumeNextViaFunction.java:99) ~[rxjava-1.0.14.jar:1.0.14]
    at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) ~[rxjava-1.0.14.jar:1.0.14]

(这是一个很长的描述,但为了使它更清楚,我不得不写得更详细。)

共有1个答案

糜宜民
2023-03-14

功能区中的ConnectTimeoutReadTimeout被传递到底层HTTP客户端。它们应用于HTTP连接(而不是建立连接后的HTTP请求)。我不知道为什么您需要像这样测试它,但对于一个健康的服务器来说,这将是很难的。例如,对于ConnectTimeout,您需要一个可以接受TCP连接但不能完成HTTP层连接的连接。对于readtimeout,您需要一个建立连接但不发送任何数据的连接。

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

  • 丝带组件是一种在任何内容上方显示信息的简便方法。.ribbon-warpper 必须位于具有 position:relative; 的元素内。在此文档页面中,我们将丝带放在 <div class="position-relative p-3 bg-gray" style="height: 180px"></div> 中,也可以将其放置在卡片、表格、行等元素上。 丝带组件有三种大小,以显示更多文本或

  • 我正在使用feign创建一个REST客户端。我有我的电话工作,但我想添加一些超时支持,我有一段时间,弄清楚如何做到这一点。 Feign的文档中说:“要将Hystrix与Feign一起使用,请将Hystrix模块添加到类路径中,然后使用HystrixFeign构建器。”好了,现在我有了这个: 现在我的所有方法都在返回HystrixCommands,我可以执行或排队,但仍然看不到如何配置它们。 但是我

  • 我和尤里卡一起使用丝带。 我的应用程序能够在以下两种配置中调用other-service。我首先使用< code > NIWSServerListClassName ,然后使用< code>listOfServers。 . 我已经看到和被用于Spring云 Netflix GitHub问题(以及文档中的某些地方)以获取功能区的服务器列表。 这两个功能区属性之间有什么区别?它们有相同的目的吗?

  • 我使用PHP和Apache以及nginx作为反向代理,所有这些都在Docker上,我有几个长时间运行的调用在60秒后计时,导致504网关超时。我知道我的应用程序被成功调用,因为我正在跟踪我的PHP应用程序的日志,我可以看到它正在积极地向日志写入。每次都是60秒的超时,但我似乎不知道那个设置在哪里。 我尝试了这篇文章中的建议,但没有任何效果。我已经用一些与时间相关的设置更新了php.ini文件,并验

  • 我正在尝试不使用图像视图。这是因为,稍后,我将生成许多形状相同但颜色不同的对象,所以我不需要继续添加图像视图,而只是在代码上添加颜色。