Слушатель Spring JMS получает пустые сообщения, вызывающие загрузку процессора

Я работаю над приложением, которое использует пару очередей jms для отправки / получения обновлений в / из внешней системы. Для тестирования моего приложения я использую Mockrunner и, в частности, модуль jms. Я сталкиваюсь со странным поведением: когда я запускаю свое приложение, я вижу, что процессор взлетел до 100%, и, анализируя дампы потоков, я вижу, что основная причина связана с прослушивателями jms, которые у меня выглядят как получение пустых сообщений это вызывает сообщения, такие как:

Consumer ... did not receive a message

Теперь я пытаюсь понять, связана ли проблема с неправильным взаимодействием моего приложения и mockrunner или с ошибкой конфигурации.

Соответствующие части конфигурации:

<bean id="destinationManager" factory-bean="mockRunnerJMSObjectFactory" factory-method="getDestinationManager" />

<bean id="mockJmsConnectionFactory" factory-bean="mockRunnerJMSObjectFactory" factory-method="createMockConnectionFactory" lazy-init="true"/>

и слушатель, который заставляет процессор вращаться бесконечно:

<jms:listener-container concurrency="5" connection-factory="mockJmsConnectionFactory" destination-type="queue" message-converter="myMessageConverter" acknowledge="transacted" >
    <jms:listener 
        id="myListener" 
        destination="myQueue" 
        ref="myConsumer" 
        method="consume"
    />
</jms:listener-container>

<bean id="myConsumer"... />

ОБНОВЛЕНИЕ Я открыл вопрос по проекту Mockrunner, вы можете увидеть его здесь.

1 ответ

Решение

После некоторого расследования я обнаружил, что проблема заключается в плохом взаимодействии со Spring DefaultMessageListenerContainer, Этот прослушиватель имеет реализацию, основанную на опросе, и, учитывая, что проверенная инфраструктура очень быстро реагирует на запросы, вызывает перегрузку ЦП. Я исправил фиктивный бегун, добавив в метод ответа уродливый нить сна, возможно, это будет исправлено рано или поздно.

Другие вопросы по тегам