org.apache.cxf.jaxrs.client.WebClient中的RecieveTimeout和SynchronousTimeout有什么区别?

时间:2018-05-30 12:43:03

标签: java rest jax-rs cxf

让我就我目前面临的问题以及我们正在努力实施的解决方案提供一些背景知识:

我们目前使用org.apache.cxf.jaxrs.client.WebClient实现了一个REST客户端,并且通过这个实现,我们希望设置一个超时,以便诚实地花时间进行优雅的操作。

在这种情况下,我们必须花费大量时间来调查提供的超时选项,以便耗时的操作能够优雅地超时,而不是让操作花费很长时间!

我们已尝试按照此处在StackOverflow上建议的许多方法来设置超时,因为下面没有达到目的(在this问题之后,尝试了这种方法):

HTTPConduit conduit = WebClient.getConfig(webClient).getHttpConduit();
conduit.getClient().setConnectionTimeout(1000 * 3);
conduit.getClient().setReceiveTimeout(1000 * 3);

显然,这没有成功。并进一步深入研究WebClient&的代码ClientConfiguration观察到有另一个选择尝试(即使这样做也没有成功)。这是我尝试过的实现。

ClientConfiguration clientConfiguration = WebClient.getConfig(webClient);
clientConfiguration.setSynchronousTimeout(90000);    //default value here being 60000, on increasing this - it doesn't take effect

当我们尝试调用相应的HTTP GET,POST或PUT操作时,只想了解这些超时何时何地生效。我非常困惑这些超时会影响现在的操作!

我知道我无法提供可以探索的最小可调试代码,但这应该是任何REST实现的基础(我猜)。

对此非常感激。

1 个答案:

答案 0 :(得分:2)

对于HTTP,~/someDir/synchronousTimeout。 CXF还支持除HTTP之外的其他传输,因此存在此附加属性。首先receiveTimeout,因此将receiveTimeout设置为其他值无效(请参阅https://github.com/apache/cxf/blob/master/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientConfiguration.java#L67)。