在VM传输上更多线程

时间:2014-09-30 22:27:40

标签: multithreading jvm mule

我正在努力解决如何影响(向上)Mule中VM传输使用的线程数。我读过Tuning& Mule文档中的性能页面,但有些东西没有点击我。

我有一个流程执行JDBC调用,然后使用foreach将结果集推送到VM队列中。

<foreach>
    <vm:outbound-endpoint exchange-pattern="one-way" path="checkService"/>
</foreach>

这是由另一个流程进行处理,包括进行HTTPS调用并检查返回值。

<flow name="ExecuteTests" doc:name="ExecuteTests">
    <vm:inbound-endpoint exchange-pattern="one-way" path="checkService"/>
    <https:outbound-endpoint exchange-pattern="request-response"...
    ...etc.
</flow>

其中一些电话很快,但有些电话需要5秒钟。我想要的是ExecuteTests流程使用更多线程来进行处理,但我只在日志中看到线程02-05。我本来希望看到出口HTTPS连接器的调度程序线程池附近使用的线程数...我认为默认为16。

我尝试了以下内容:

<vm:connector name="vmConnector">
    <receiver-threading-profile maxThreadsActive="100" maxThreadsIdle="100"/>
</vm:connector>

<flow name="ExecuteTests" doc:name="ExecuteTests">
    <vm:inbound-endpoint exchange-pattern="one-way" path="checkService" connector-ref="vmConnector"/>
    ...etc.

但没有区别。

认为可能是入站端点的缓冲区弄乱了东西,我试过了:

<vm:connector name="vmConnector">
    <receiver-threading-profile maxThreadsActive="100" maxThreadsIdle="100"/>
    <vm:queue-profile maxOutstandingMessages="1"/>  
</vm:connector>

但它也没有帮助。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

从您的流程中可以看出问题不在于线程。(我相信)。

通常,VM接收器线程很快,并且它们会根据进入的请求数量进行扩展。 在“ExecuteTests”流中,似乎有一个出站HTTP调用。因此,HTTP调用可能是导致延迟的原因。

但是如果你想增加线程,请尝试为HTTP连接器添加调度程序线程配置文件。

另外,为了增加流处理的线程数,请使用Flow线程配置文件。

<asynchronous-processing-strategy name="executeTestsStrategy" maxThreads="40"  minThreads="20"  />

<flow name="ExecuteTests" doc:name="ExecuteTests" processingStrategy="executeTestsStrategy">
    <vm:inbound-endpoint exchange-pattern="one-way" path="checkService"/>
    <https:outbound-endpoint exchange-pattern="request-response"...
    ...etc.
</flow>

希望这有帮助。