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

How to set Camel RESTful client timeout and HTTPClientPolicy

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

如果您想使用 XML 文件配置端点超时,raphaëλ 之前发布的 link 是正确的。 但是如果你想完全以编程方式完成它,你可以使用 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
    }
}

虽然这个回答有点晚了,但我希望它能对你的项目有所帮助。