为基于CXF的JAX-RS客户端设置自定义超时
设置CXF JAX-RS客户端自定义超时(无需更改对象类型)
嘿,我刚好踩过这个坑!你手里的ClientConfiguration其实完全能搞定超时设置,只是相关的配置入口藏在传输层的对象里,不用改你现有的Client类型,咱们直接来操作:
首先,你需要从ClientConfiguration里拿到HTTP传输管道对象HTTPConduit——这才是设置超时的核心载体:
import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transport.http.HTTPClientPolicy; // 你已有的代码 Client client = WebClient.client(api); ClientConfiguration config = WebClient.getConfig(client); // 获取HTTPConduit HTTPConduit conduit = config.getHttpConduit();
接下来创建HTTPClientPolicy对象,在这里配置你的连接超时和接收超时(单位都是毫秒):
HTTPClientPolicy clientPolicy = new HTTPClientPolicy(); // 设置连接超时:30秒 clientPolicy.setConnectionTimeout(30000); // 设置接收超时:60秒 clientPolicy.setReceiveTimeout(60000);
最后把配置好的策略绑定回HTTPConduit就大功告成了:
conduit.setClient(clientPolicy);
补充说明:
- 为啥之前找不到?因为CXF把传输层的配置(比如超时、HTTP头)都放在
HTTPConduit里,而不是直接暴露在Client或ClientConfiguration的顶层方法中,这是它的分层设计思路。 - 如果你的调用是HTTPS协议,不用担心——
HttpsURLConnectionConduit是HTTPConduit的子类,这套代码完全适用,不需要额外修改。 - 超时数值根据你的业务需求调整就行,注意单位是毫秒,别写成秒了!
内容的提问来源于stack exchange,提问作者esseara
相关产品推荐
相关产品推荐

