Spring — DefaultMessageListenerContainer TaskExecutor Мониторинг потока

Я использую SimpleAsyncTaskExecutor внутри моего DefaultMessageListenerContainer, и я хотел бы отслеживать количество активных потоков с помощью JMX mbean. У меня есть созданный и подключенный mbean, но при мониторинге JConsole количество активных потоков в taskExecutor остается на том же значении, с которым оно было создано. Он не меняется, когда DMLC получает входящие сообщения. Не должно ли это число колебаться? Вот запись из Spring на SimpleAsyncTaskExecutor:

SimpleAsyncTaskExecutor: Эта реализация не использует повторно никакие потоки, а запускает новый поток для каждого вызова. Однако он поддерживает ограничение параллелизма, которое будет блокировать любые вызовы, превышающие лимит, до тех пор, пока слот не будет заполнен. был освобожден. Если вы ищете настоящий пул, продолжайте прокручивать страницу вниз. Выполнение и планирование задач Spring Framework

Вот моя настройка с использованием 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. Он захватывает приватное поле threadCount в суперклассе TaskExecutor:

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, но они не достигли моей цели. Я хотел бы иметь возможность найти что-то, что не связано с созданием новых классов или добавлением дополнительных методов к конкретным классам.


person Gaʀʀʏ    schedule 15.07.2014    source источник


Ответы (1)


Нет; он будет колебаться только в том случае, если maxConcurrentConsumers больше concurrentConsumers, и в этом случае контейнер будет корректировать потоки по требованию.

person Gary Russell    schedule 15.07.2014
comment
Я помню, что читал это. Я надеялся, что там будет больше. Спасибо ! - person Gaʀʀʏ; 17.07.2014