我们在Spring应用程序中使用Camel 2.14,并使用Camel CXF-RS组件(http://camel.apache.org/cxfrs.html)在第三方服务上生成RESTful请求。
当他们的服务器脱机并且Camel无法建立连接时,它不会超时30秒。我们希望能够调整此超时值,但很难看到我们如何做到这一点。有人可以建议吗?
我们可以看到Camel本身使用从HTTPClientPolicy对象获取的值,它上面有一个setConnectionTimeOut ..但是我们如何得到这个对象?
我们可以通过编程方式获取HTTPClientPolicy对象吗?或者我们必须在传递给template.send()的Camel URI中引用它,例如:
template.send("cxfrs://" + url + "/match/" + appId + "/" + reqId?httpClientAPI=true&http.connection.timeout=5000
答案 0 :(得分:4)
如果您想使用XML文件配置端点超时,则raphaëλ之前发布的链接是正确的。 但是如果你想以编程方式完成它,你可以使用cxf组件的选项之一( cxfEndpointConfigurer )来完成它,如this camel-cxf component unit-test所示。
在你的情况下,它会是这样的:
template.send("cxfrs://" + url + "/match/" + appId + "/" + "reqId?httpClientAPI=true&cxfEndpointConfigurer=#endpointConfigurer"
然后你需要一个“endpointConfigurer”bean,其配置如下:
@Component("endpointConfigurer")
public class TemplateEndpointConfigurer implements CxfEndpointConfigurer {
@Override
public void configure(AbstractWSDLBasedEndpointFactory factoryBean) {
// Do nothing here
}
@Override
public void configureClient(Client client) {
final HTTPConduit conduit = (HTTPConduit) client.getConduit();
final HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(webServiceConnectionTimeout);
policy.setReceiveTimeout(webServiceReadTimeout);
policy.setConnection(ConnectionType.CLOSE);
conduit.setClient(policy);
}
@Override
public void configureServer(Server server) {
// Do nothing here
}
}
即使这个答案有点迟了,我希望它可以帮助您完成项目。