骆驼花了很长时间才得到http响应

时间:2017-08-03 19:46:07

标签: apache-camel

我正在使用camel来协调对多个休息端点的Web服务调用。我正在使用多播来发送请求参数并为不同路由中的每个Web服务创建标头,并使用recepientList来调用动态URL。但看起来整个过程耗时太长。 服务响应的处理很少,因此不会超过100毫秒。

这是第一个多播路由:

from("direct:getCustomer")
        .multicast().shareUnitOfWork().parallelProcessing().streaming()
        .aggregationStrategy(txnAggregator)
        .executorService(exeServiceForRest)
        .to("direct:RouteA", "direct:RouteB", "direct:RouteC");

有8条路线可以对这个消息进行多播。 其中2条路由根据响应对另一个Web服务进行另一次多播呼叫。

from("direct:routeA")
        .process(orderReqBuilder)
        .streamCaching()
        .recipientList(header("url"))
        .multicast().shareUnitOfWork().parallelProcessing().streaming()
        .executorService(exeServiceForRest)
        .aggregationStrategy(txnAggregator)
        .to("direct:subRouteA", "direct:subRouteB");    

所有8条路线的最长响应时间为400毫秒。这些subRoute Web服务的最大响应时间为300毫秒 所以整体响应时间应为400(level 1 service calls) + 300(level2 servicer calls) + some computation time(~100 ms) = 900 ms 但它需要大约2秒才能完成。 而且,在日志中我发现:

WMPLTFMLOG420420    1501782127187   2017-08-03 10:42:07.187 when the msg comes to header builder class

WMPLTFMLOG420420    1501782127362   2017-08-03 10:42:07.362 applog.cls=org.apache.camel.component.http4.HttpComponent,applog.mthd=createConnectionManager,applog.line=322,applog.msg=Created ClientConnectionManager org.apache.http.impl.conn.PoolingHttpClientConnectionManager@77809ca2

因此,我估计在创建网址和发送请求方面花费了近200毫秒。为什么会这样? 总的来说,在这种情况下如何改善性能。我在4核机上测试了这个。 Camel版本2.18.3,我正在使用http4组件。

0 个答案:

没有答案