如何设置Camel RESTful客户端超时和HTTPClientPolicy

时间:2016-02-26 11:57:25

标签: java apache-camel cxf

我们在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

1 个答案:

答案 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
    }
}

即使这个答案有点迟了,我希望它可以帮助您完成项目。