ActiveMQ: исключение «канал неактивен слишком долго» останавливает обмен сообщениями посредника

Моя система состоит из следующих частей:

Брокер ActiveMQ выставлен на tcp, порт 616163 Grails / Spring Wars, которые живут на своих собственных серверах Tomcat, они публикуют и принимают сообщения для JMS-брокера.n раз удаленная клиентская система с компонентом JMS-прослушивателя для получения клиентских сообщений, подключается к JMS-брокеру через VPN, используя имя хоста и порт 61616

Пока что все отлично работает в среде разработки, тестирования и производства.

Мы только что подключили новую клиентскую систему к работе, и мы заметили, что ее журналы начинают сообщать об исключениях "канал был неактивен слишком долго" и сбрасывают соединение. Беспокоит общий эффект этого единственного клиента, заключающийся в том, что он останавливает потребление всех сообщений в брокере, что приводит к остановке всей системы.

Этот клиентский прослушиватель (использующий фабрику соединений Spring caching), по-видимому, подключается к JMS-брокеру, ок, обрабатывает некоторые сообщения, а затем через 3 минуты сообщает об исключении. Включил DEBUG в ActiveMQ и получил множество выходных данных, но ничего не предлагало предупреждение или ошибку на брокере в то же время.

Поверьте, что ActiveMQ имеет некоторое внутреннее поддержание активности, которое должно поддерживать соединение, даже если оно неактивно дольше 30 секунд по умолчанию.

Специалисты по инфраструктуре отслеживают VPN этого клиента и подтверждают, что он постоянно работает и подключен.

Не верьте, что в этом виноват код или конфигурация Spring, поскольку у нас есть множество других экземпляров слушателя на разных клиентах, и все они ведут себя хорошо.

Предположим, у меня действительно есть 2 вопроса:

Что вызывает исключения «неактивный канал»?Почему это исключение в одном клиенте мешает ActiveMQ работать?

РЕДАКТИРОВАТЬ - добавление исключения трассировки стека:

2013-04-24 14:02:06,359 WARN  - Encountered a JMSException - resetting the underlying JMS Connection (org.springframework.jms.connection.CachingConnectionFactory)
javax.jms.JMSException: Channel was inactive for too (>30000) long: jmsserver/xxx.xx.xx.xxx:61616
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
    at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1833)
    at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1850)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:126)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101)
    at org.apache.activemq.transport.WireFormatNegotiator.onException(WireFormatNegotiator.java:160)
    at org.apache.activemq.transport.InactivityMonitor.onException(InactivityMonitor.java:266)
    at org.apache.activemq.transport.InactivityMonitor$4.run(InactivityMonitor.java:186)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:693)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:719)
    at java.lang.Thread.run(Thread.java:813)
Caused by: org.apache.activemq.transport.InactivityIOException: Channel was inactive for too (>30000) long: jmsserver/xxx.xx.xx.xxx:61616
    ... 4 more

Ответы на вопрос(2)

Ваш ответ на вопрос