【问题标题】:Jaxrs ability to set a global timeout (connect + read)Jaxrs 能够设置全局超时(连接 + 读取)
【发布时间】:2017-07-08 17:46:44
【问题描述】:

在 Jaxrs(例如 WebClient)中,我们可以设置连接超时和读取超时。

    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 秒内获得响应或放弃搜索。

【问题讨论】:

    标签: jax-rs cxf jax-ws


    【解决方案1】:

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

    maximum_timeout = connection_timeout + receive_timeout
    

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

    【讨论】:

    • 也许通过拦截器?,但我不知道它是否可行
    • 我查看了WebClient javadoc 并且无法中止当前请求,因此无法使用拦截器,因为它将在与主请求相同的线程中执行(并且主线程它被阻塞直到响应/超时)。在两种情况下,您都需要创建一个额外的超时监控线程并异步工作:超时或正确响应。考虑一下是否值得……
    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2015-06-18
    • 2015-09-16
    • 1970-01-01
    • 2016-03-14
    • 2011-12-05
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多