限制 HTTP 侦听器活动线程以控制并发 mule 流实例的数量
Limiting HTTP Listener Active Threads to control number of concurrent mule flow instaces
我正在尝试测试如何限制并发传入 HTTP 请求的数量。
所以我试着模拟了下面的场景。
我创建了一个简单的流程
1. Http Listener作为Msg源
2.使用Groovy脚本,休眠15秒引入延时
3. 使用 Hello world 设置 Payload。
因此任何单个请求的响应时间至少为 15 秒。然后为了限制活动线程的数量(即假设控制并发请求/处理线程),我将 maxActiveThreads 设置为 1。因此理想情况下我会允许 1 个并发线程来处理流程。
现在,当我使用 apache 基准测试启动时,通过 1 个请求进行简单的获取,我收到的响应时间为 15 秒,这很好。现在,当我将并发请求数增加到 2 时,我仍然收到 15 秒的响应时间。我预计是 30 秒
我看到了 9 个并发请求之前的行为。超过 9 个,则从第 10 个请求开始将其放入等待队列。
请专家解释一下如何将活动线程数限制为 1。并发请求数如何设置为 9(我在使用 JConsole
的线程中看到有 9 SelectorRunner
线程,我假设有链接到它)。
下面是简单的流程。
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8082" doc:name="HTTP Listener Configuration">
<http:worker-threading-profile maxThreadsActive="1" />
</http:listener-config>
<flow name="getting-sartedFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP" />
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy">
<![CDATA[Thread.currentThread().sleep((long)(15000));]]>
</scripting:script>
</scripting:component>
<set-payload value="Hello World" doc:name="Set Payload" />
</flow>
正如 forum 中的回答,您需要为 worker-threading-profile
定义一个 poolExhaustedAction
。如果您不这样做,那么将使用默认值 运行,它解释了您所看到的行为。据我了解,您应该使用 WAIT。
<http:worker-threading-profile maxThreadsActive="1" poolExhaustedAction="WAIT"/>
我正在尝试测试如何限制并发传入 HTTP 请求的数量。 所以我试着模拟了下面的场景。 我创建了一个简单的流程 1. Http Listener作为Msg源 2.使用Groovy脚本,休眠15秒引入延时 3. 使用 Hello world 设置 Payload。
因此任何单个请求的响应时间至少为 15 秒。然后为了限制活动线程的数量(即假设控制并发请求/处理线程),我将 maxActiveThreads 设置为 1。因此理想情况下我会允许 1 个并发线程来处理流程。
现在,当我使用 apache 基准测试启动时,通过 1 个请求进行简单的获取,我收到的响应时间为 15 秒,这很好。现在,当我将并发请求数增加到 2 时,我仍然收到 15 秒的响应时间。我预计是 30 秒
我看到了 9 个并发请求之前的行为。超过 9 个,则从第 10 个请求开始将其放入等待队列。
请专家解释一下如何将活动线程数限制为 1。并发请求数如何设置为 9(我在使用 JConsole
的线程中看到有 9 SelectorRunner
线程,我假设有链接到它)。
下面是简单的流程。
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="8082" doc:name="HTTP Listener Configuration">
<http:worker-threading-profile maxThreadsActive="1" />
</http:listener-config>
<flow name="getting-sartedFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP" />
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy">
<![CDATA[Thread.currentThread().sleep((long)(15000));]]>
</scripting:script>
</scripting:component>
<set-payload value="Hello World" doc:name="Set Payload" />
</flow>
正如 forum 中的回答,您需要为 worker-threading-profile
定义一个 poolExhaustedAction
。如果您不这样做,那么将使用默认值 运行,它解释了您所看到的行为。据我了解,您应该使用 WAIT。
<http:worker-threading-profile maxThreadsActive="1" poolExhaustedAction="WAIT"/>