2017-02-19 79 views
1

在Jaxrs(例如WebClient)中,我们可以设置连接超时和读取超时。Jaxrs设置全局超时的能力(连接+读取)

ClientConfiguration c = WebClient.getConfig(client); 
    HTTPConduit http = c.getHttpConduit(); 
    HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 
    httpClientPolicy.setConnectionTimeout(timeout); 
    httpClientPolicy.setReceiveTimeout(timeout); 
    httpClientPolicy.setAllowChunking(false); 
    http.setClient(httpClientPolicy); 

我想设置的超时包括,我真的不关心有多少时间在连接或接收度过的,我的要求是让在X秒的响应或只是放弃搜索。

回答

1

CXF无法为考虑连接和接收持续时间的请求设置最大超时时间。请求的最大超时时间为:

maximum_timeout = connection_timeout + receive_timeout 

查看关于Apache HTTP client的相似问题。解决方法可以是在单独的线程中设置一个计时器,以在所需的最大超时时间到期时终止连接

+0

也许通过拦截器?,但我不知道它是否可行 – cocorossello

+1

我已阅读过'WebClient' javadoc和它是不可能放弃当前请求的,所以它不可能使用拦截器,因为它将在主要请求(和主线程被阻塞,直到响应/定时)的同一线程中执行。在这两种情况下,您都需要创建具有超时的额外监控线程并进行异步工作:超时或正确响应。考虑是否值得... – pedrofb