【问题标题】:Camel set CXF timeouts with Java DSLCamel 使用 Java DSL 设置 CXF 超时
【发布时间】:2013-03-21 20:58:57
【问题描述】:

我对骆驼还很陌生,遇到了一个问题。

我正在尝试使用 cxf 端点创建一个动态 Web 服务代理(正在工作)。一切都很顺利,除了我不知道如何使用 Java DSL 设置 cxf 端点超时。

我找到了很多关于如何使用 Spring 配置的文章,但我试图通过仅使用 Java DSL 来实现这一点。

这是我目前所拥有的,请有人指出我如何使用 Java DSL 操作 CXF 超时(连接/接收)的正确方向

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 apache-camel


    【解决方案1】:

    好的,所以经过一些测试并拔掉头发后,我发现我的做法完全错误。

    我不需要设置入站 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 端点中设置超时,我现在可以获得可配置的超时 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      相关资源
      最近更新 更多