骆驼用Java DSL设置CXF超时
问题描述:
我对骆驼很陌生并且遇到问题。骆驼用Java DSL设置CXF超时
我正在尝试使用cxf端点创建动态Web服务代理(正在工作)。除了我不知道如何使用Java DSL设置cxf端点超时之外,一切都进展顺利。
我发现了许多关于如何使用Spring配置的文章,但我试图通过仅使用Java DSL来实现这一点。
这是我现在有,请可能有人点我就如何操纵正确的方向CXF超时的使用Java DSL
public void configure() throws Exception
{
onException(Exception.class).handled(true).transform()
.method(MyExceptionHandler.class, "handleException");
CxfEndpoint inboundCxf = new CxfEndpoint();
inboundCxf.setAddress(soapProxyConfig.getBaseUrl()
+ soapProxyConfig.getAddress());
inboundCxf.setCamelContext(camelContext);
inboundCxf.setDataFormat(DataFormat.RAW);
inboundCxf.setServiceName(new QName(soapProxyConfig
.getTargetNamespace(), soapProxyConfig.getRemoteServiceName()));
inboundCxf.setPortName(new QName(soapProxyConfig.getTargetNamespace(),
soapProxyConfig.getRemotePortName()));
inboundCxf.setWsdlURL(soapProxyConfig.getRemoteWsdl());
SedaEndpoint sedaEndpoint = new SedaEndpoint();
sedaEndpoint.setConcurrentConsumers(100);
sedaEndpoint.setExchangePattern(ExchangePattern.InOut);
sedaEndpoint.setSize(100);
sedaEndpoint.setCamelContext(camelContext);
sedaEndpoint.setEndpointUriIfNotSpecified("seda:" + routeId + "-Queue");
Endpoint[] remoteEndpoints = new Endpoint[soapProxyConfig
.getRemoteUrls().size()];
for (int i = 0; i < soapProxyConfig.getRemoteUrls().size(); i++)
{
Endpoint endpoint = camelContext.getEndpoint(soapProxyConfig
.getRemoteUrls().get(i));
endpoint.setCamelContext(camelContext);
remoteEndpoints[i] = endpoint;
}
from(inboundCxf).routeId(routeId)
.routePolicy(new WebServiceRoutePolicy()).to(sedaEndpoint);
from(sedaEndpoint).routeId(routeId + "-Queue").loadBalance()
.roundRobin().to(remoteEndpoints).id("Out");
答
好(连接/接收),所以在一些测试和把我的头发拉出来,我发现我完全错了。
我不需要设置入站CXF超时值,我只需要设置出站http超时值,它给了我所需的超时检测。
所以,现在我有一个看起来像这样
onException(Exception.class).handled(true).transform(
method(SoapExceptionHandler.class, "handleException"));
SedaEndpoint sedaEnpoint = createSedaEnpoint();
JettyHttpEndpoint jettyEnpoint = createJettyHttpEndpoint();
CxfEndpoint cxfEnpoint = createCxfEndpoint();
from(cxfEnpoint).routeId(getRouteName()).to(sedaEnpoint);
from(sedaEnpoint).to(jettyEnpoint)
.routeId(getRouteName() + "-endpoint");
而且谁想要知道如何设置超时为JettyProducer在这里我们去
private JettyHttpEndpoint createJettyHttpEndpoint() throws Exception
{
JettyHttpComponent jettyComponent = new JettyHttpComponent();
jettyComponent.setCamelContext(camelContext);
jettyComponent.setHttpClientMinThreads(proxyConfig
.getMinRemoteClientThreads());
jettyComponent.setHttpClientMaxThreads(proxyConfig
.getMaxRemoteClientThreads());
JettyHttpEndpoint jettyEnpoint = new JettyHttpEndpoint(jettyComponent,
"jetty:http", new URI(proxyConfig.getTargetEndpointUrl()));
jettyEnpoint.setCamelContext(camelContext);
jettyEnpoint.setExchangePattern(ExchangePattern.InOut);
jettyEnpoint.setThrowExceptionOnFailure(false);
jettyEnpoint.getClient().setTimeout(
proxyConfig.getRemoteEndpointTimeout());
return jettyEnpoint;
}
通过这种结构和路由设置Jetty端点的超时时间现在我可以配置超时:)