簡體   English   中英

春季-DefaultMessageListenerContainer TaskExecutor線程監視

[英]Spring - DefaultMessageListenerContainer TaskExecutor Thread monitoring

我在DefaultMessageListenerContainer內使用SimpleAsyncTaskExecutor,我想使用JMX mbean監視活動線程數。 我已經創建並連接了mbean,但是在JConsole上進行監視時,taskExecutor上的活動線程數仍保持為創建時的值。 隨着DMLC接收入站消息,它不會波動。 這個數字不應該波動嗎? 這是Spring在SimpleAsyncTaskExecutor上的文章:

SimpleAsyncTaskExecutor: 此實現不重用任何線程,而是為每次調用啟動一個新線程。 但是,它確實支持並發限制,該限制將阻止超出限制的所有調用,直到釋放插槽為止。 如果您正在尋找真正的池,請繼續向下滾動頁面。 Spring框架任務執行和調度

這是我使用Spring-jms 3.0.3.RELEASE的設置:

  <bean id="inboundMessageAdaptorMessageContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="singleJMSConnectionFactory" />
    <property name="destination" ref="eventReceiveQueue" />
    <property name="sessionTransacted" value="true" />
    <property name="messageListener" ref="inboundMessageRetryingListenerAdapter" />
    <property name="concurrentConsumers" value="15" />     
  </bean>

我的Mbean公開了DMLC中的字段。 它在TaskExecutor的超類上獲取私有字段threadCount:

Field taskExecutorField = dmlc.getClass().getDeclaredField("taskExecutor");
taskExecutorField.setAccessible(true);
taskExecutor = (SimpleAsyncTaskExecutor) taskExecutorField.get(dmlc);

threadCountField = taskExecutor.getClass().getSuperclass().getDeclaredField("threadCount");
threadCountField.setAccessible(true);
return (int) threadCountField.get(taskExecutor);

我曾嘗試對DMLC上的設置(如IdleTaskExecutionLimit和CacheLevel)進行調整,但是它們並沒有達到我的目標。 我希望能夠找到不涉及創建新類或向具體類添加其他方法的內容。

沒有; 它只會出現波動,如果maxConcurrentConsumers大於concurrentConsumers ,在這種情況下,容器將調整對需求的線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM