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