Limiting HTTP Listener Active Threads to control number of concurrent mule flow instaces

别说谁变了你拦得住时间么 提交于 2019-12-10 11:57:08

问题


I am trying to do a test on how to limit the number of concurrent incoming HTTP requests. So I tried to simulate the following scenario. I have created a simple flow with 1. Http Listener as Msg source 2. Using Groovy Script, Sleeping for 15 seconds to introduce delay 3. Set the Payload with Hello world.

So any single request will have Min 15 sec of response time. Then in order to limit number of active threads (i.e assuming to control concurrent requests / processing threads) , I have set the maxActiveThreads to 1. So ideally I would allow 1 concurrent thread to process the flow.

Now when I fire using apache benchmarking, as simple get with 1 request, I receive with response time as 15 seconds, which is fine. Now when I increase the number of concurrent requests to 2, I still receive the response time as 15 seconds . I am expecting it be 30 seconds

I see the behaviour until 9 concurrent requests. Beyond 9, then from 10th request onwards it is placed in the waiting queue.

So can an expert please explain how Can I limit the number of active threads to 1. And how is the number of concurrent requests set to 9 (I see in threads using JConsole there are 9 SelectorRunner threads, which I assume there are linked to it).

Below is the simple flow.

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

回答1:


As answered in the forum, you need to define a poolExhaustedAction for the worker-threading-profile. If you don't then the default one will be used which is RUN, which explains the behavior you're seeing. From what I understand you should use WAIT.

<http:worker-threading-profile maxThreadsActive="1" poolExhaustedAction="WAIT"/>



来源:https://stackoverflow.com/questions/29096104/limiting-http-listener-active-threads-to-control-number-of-concurrent-mule-flow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!