Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring外部客户端超时_Java_Spring_Restclientbuilder - Fatal编程技术网

Java Spring外部客户端超时

Java Spring外部客户端超时,java,spring,restclientbuilder,Java,Spring,Restclientbuilder,在Spring应用程序中,我们依赖于外部系统。 我们想在对该系统的请求上设置一个超时,但不知道如何配置它 我们使用这个: return clientBuilder.build() .target(baseUrl) .register(jsonProvider) .register(jsonAcceptHeaderClientRequestFilter) .register(new Logging

在Spring应用程序中,我们依赖于外部系统。 我们想在对该系统的请求上设置一个超时,但不知道如何配置它

我们使用这个:

   return clientBuilder.build()
            .target(baseUrl)
            .register(jsonProvider)
            .register(jsonAcceptHeaderClientRequestFilter)
            .register(new LoggingFilter());
我试过这个: 还有许多其他的建议,但都无法付诸实施。如有任何建议,将不胜感激

更新不起作用的内容:

.property("http.connection.timeout", 1)
.property("http.receive.timeout", 1)
以及

.property(ClientProperties.CONNECT_TIMEOUT,1)
.property(ClientProperties.READ_TIMEOUT,1)

您可以使用
服务器。连接超时
,但这将为所有请求设置超时,而不仅仅是对外部系统的请求

服务器。连接超时=#连接器在关闭服务器之前等待另一个HTTP请求的时间 连接。未设置时,连接器的容器特定默认值 使用。使用值-1表示否(即无限) 超时


您可以使用
服务器。连接超时
,但这将为所有请求设置超时,而不仅仅是对外部系统的请求

服务器。连接超时=#连接器在关闭服务器之前等待另一个HTTP请求的时间 连接。未设置时,连接器的容器特定默认值 使用。使用值-1表示否(即无限) 超时


正如您问题中链接的答案中所确认的,@df778899的一条评论,根据我的测试,以下用法对客户端正常工作

如果外部服务器未能在设置的时间内响应,则生成
java.net.SocketTimeoutException

对于客户端,我已经测试了下面的代码片段,它适用于读取超时。这是官方的。在该页面中搜索以下代码段中使用的参数

注意:对于支持此功能时的版本,请选中此项

更新:OP可能不需要以下内容,但出于学术目的保留

我的直觉是,你在追求一个不同的目标。在我看来,你的外部系统实际上在响应,但可能比你期望的速度慢,或者响应本身更大,这反过来又需要比你期望的更长的时间来消耗

在这种情况下,您可以调整超时参数。但是,它们是在循环套接字读取的基础上工作的。因此,请考虑将超时设置为<代码> x>代码>,并且响应数据为代码> y字节。读取速度慢可能意味着socket.read()调用会输出数据,但内容是1/2字节<代码>X适用于每次读取。因此,理论上,完整读取可能需要
X*Y
ms

如果以上确实是您的问题,那么您可能必须使用外部计时器来解决此问题。例如,您可以:

  • 通过拨打外部服务电话
  • 然后,打电话

  • 正如您问题中链接的答案中所确认的,@df778899的一条评论,根据我的测试,以下用法对客户来说可以正常使用

    如果外部服务器未能在设置的时间内响应,则生成
    java.net.SocketTimeoutException

    对于客户端,我已经测试了下面的代码片段,它适用于读取超时。这是官方的。在该页面中搜索以下代码段中使用的参数

    注意:对于支持此功能时的版本,请选中此项

    更新:OP可能不需要以下内容,但出于学术目的保留

    我的直觉是,你在追求一个不同的目标。在我看来,你的外部系统实际上在响应,但可能比你期望的速度慢,或者响应本身更大,这反过来又需要比你期望的更长的时间来消耗

    在这种情况下,您可以调整超时参数。但是,它们是在循环套接字读取的基础上工作的。因此,请考虑将超时设置为<代码> x>代码>,并且响应数据为代码> y字节。读取速度慢可能意味着socket.read()调用会输出数据,但内容是1/2字节<代码>X适用于每次读取。因此,理论上,完整读取可能需要
    X*Y
    ms

    如果以上确实是您的问题,那么您可能必须使用外部计时器来解决此问题。例如,您可以:

  • 通过拨打外部服务电话
  • 然后,打电话

  • 它是否必须特定于外部系统的请求?我知道您可以使用
    server.connection timeout
    属性全局配置请求超时。看到了吗?这也会影响对我们系统的请求超时吗?是的,很遗憾。我不知道通过请求设置超时的任何方法,因为它似乎是由嵌入式服务器(Tomcat)管理的,但可能有另一种方法,如Jersey timeout链接上建议的,可以尝试
    target(baseUrl).property(ClientProperties.CONNECT\u timeout,1)
    target(baseUrl).property(ClientProperties.READ_TIMEOUT,1)
    两者都会导致
    javax.ws.rs.ProcessingException:java.net.SocketTimeoutException
    本地失败。不过,您似乎不太可能没有尝试过这一点-感觉有比上述示例更多的事情发生了?(这是jersey-client-2.14)它是否必须特定于对
    外部系统的请求
    ?我知道您可以使用
    server.connection timeout
    属性全局配置请求超时。看到了吗?这也会影响对我们系统的请求超时吗?是的,很遗憾。我不知道通过请求设置超时的任何方法,因为我它似乎是由嵌入式服务器(Tomcat)管理的,但可能有另一种ELSEWHEREHMM,正如泽西岛超时链接上建议的那样,可以尝试
    target(baseUrl).property(ClientProperties.CONNECT\u timeout,1)
    target(baseUrl).property(ClientProperties.READ\u timeout,1)
    两者都会导致
    javax.ws.rs.ProcessingException:java.net.SocketTimeoutExcepti
    
    target(baseUrl)
    .property(ClientProperties.CONNECT_TIMEOUT, 1000)
    .property(ClientProperties.READ_TIMEOUT, 1000)
    
    target(baseUrl)
    .property("http.connection.timeout", 5000)
    .property("http.receive.timeout", 5000)