Camel Context上的Threadpool配置

时间:2016-06-22 07:23:17

标签: apache-camel

我创建了多个camelContexts,并希望每个camelContext都使用自己的自定义线程池。但是,日志显示我所有的camelContexts都使用相同的线程池。我错过了什么?

主要骆驼背景

<camelContext id="routeLoader_route">
    (no threadpool defined)

    <route id="RouteCreator" >
        <from uri="file://jsonFilePath" />
        <bean ref="routeMonitor" method="loadJsontoCreateRoute" />
    </route>

    (some other routes defined)
</camelContext>

方法“loadJsontoCreateRoute”将读取三个json文件,然后创建三个连接路由

  1. 端点“file:// xxx1 / out”到端点“direct-vm:out.test”
  2. 端点“file:// xxx2 / out”到端点“direct-vm:out.test”
  3. 端点“file:// xxx3 / out”到端点“direct-vm:out.test”
  4. 另一个骆驼情境

    <camelContext id="test_out_route">
        <threadPoolProfile id="outTestThreadPoolProfile" defaultProfile="true" poolSize="1" maxPoolSize="1" maxQueueSize="1000"  rejectedPolicy="CallerRuns"/>
    
        <route id="outboundTestingRouter">
            <from uri="direct-vm:out.test"/>
            <doTry>
                <log message="Outbound Test -- START" loggingLevel="INFO" />
                <recipientList>
                    <method ref="outTestBean" method="dynamicRoute" />
                </recipientList>
            <doFinally>
                <log message="Outbound Test-- END" loggingLevel="INFO" />
                <stop/>
            </doFinally>
            </doTry>
        </route>
    
        (Some other routes defined)
    </camelContext>
    

    dynamicRoute方法将返回up for ftp component

    记录

    20160623 09:48:04.297 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.524 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:04.526 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.527 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.634 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:04.636 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.652 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:04.653 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.749 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:04.749 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.827 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:04.827 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.890 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:04.937 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:04.937 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:04.999 [Camel (routeLoader_route) thread #24 - file://xxx3/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:05.140 [Camel (routeLoader_route) thread #5 - file://xxx1/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:05.358 [Camel (routeLoader_route) thread #5 - file://xxx1/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:05.358 [Camel (routeLoader_route) thread #5 - file://xxx1/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:05.469 [Camel (routeLoader_route) thread #5 - file://xxx1/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:05.471 [Camel (routeLoader_route) thread #5 - file://xxx1/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:05.593 [Camel (routeLoader_route) thread #5 - file://xxx1/out] INFO outboundTestingRouter  - Outbound Test -- END
    20160623 09:48:05.905 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- START
    20160623 09:48:05.999 [Camel (routeLoader_route) thread #17 - file://xxx2/out] INFO outboundTestingRouter  - Outbound Test -- END
    

    日志的第3行到第10行显示,当我的threadpool outTestThreadPoolProfile池大小限制为1时,有多个outboundTestingRouter路由同时运行

    这表明脱口使用了线程池outTestThreadPoolProfile并没有被outboundTestingRouter路由使用

    我想要的是限制最大值。 route outboundTestingRouter的并发使用次数。

1 个答案:

答案 0 :(得分:1)

嗯,看起来应该有用。日志声明怎么说你没有使用你的线程池?

注意事项:

1)您的路由需要利用线程池来取消默认模板。

2)您始终可以手动将线程池分配给组件,语法类似于:executorServiceRef =&#34; outTestThreadPoolProfile&#34;但请务必查看您的组件文档

3)如果您的默认线程池配置文件不起作用,您可以简单地使用标准ThreadPool标记创建一个可以直接分配给组件的隔离线程池。