gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:10:34 26 4
gpt4 key购买 nike

我们在 spring 应用程序中使用 Camel 2.14,并利用 Camel CXF-RS 组件 ( http://camel.apache.org/cxfrs.html ) 在第 3 方服务上生成 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ëλ 之前发布的链接是正确的。但如果您想完全以编程方式完成,您可以使用 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
}
}

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

关于java - 如何设置 Camel RESTful 客户端超时和 HTTPClientPolicy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35651090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com