ActiveMQ: 'canal inativo por muito tempo' exceções interrompem mensagens de corretor

Meu sistema tem as seguintes partes:

Corretor do ActiveMQ exposto no tcp, porta 616163 Guerras Grails / Spring que vivem em seus próprios servidores Tomcat, publicam e consomem mensagens para o broker JMSn vezes o sistema cliente remoto com um componente listener JMS para receber mensagens específicas do cliente, conecte-se ao broker JMS por meio de VPN usando um nome de host e a porta 61616

Até agora, tudo funciona bem em todos os ambientes de desenvolvimento, teste e produção.

Acabamos de conectar um novo sistema cliente em produção e notamos que as exceções do registro começam a denunciar 'o canal ficou inativo por muito tempo' e desconectam a conexão. Preocupar-se com o efeito geral desse cliente é que ele interrompe todo o consumo de mensagens no broker, de modo que o sistema inteiro é interrompido.

Esse listener de cliente (usando Spring connection factory de armazenamento em cache) aparece para se conectar ao broker JMS, processar algumas mensagens e, em seguida, 3 minutos relatam a exceção. Ligado DEBUG no ActiveMQ e tem cargas de saída, nada sugerindo um aviso ou erro no corretor em torno do mesmo tempo embora.

Acredite que o ActiveMQ tem algum keep interno que deve manter a conexão mesmo se inativo por mais de 30 segundos.

Os caras da infraestrutura monitoraram a VPN desse cliente e confirmaram que ele permanece ligado e ligado o tempo todo.

Não acredite que é código ou configuração de Spring que está em falta, como temos inúmeras outras instâncias do ouvinte em clientes diferentes e todos eles se comportam bem.

Suponha que eu tenha 2 perguntas realmente:

O que está causando exceções "inativas do canal"?Por que essa exceção em um único cliente impede que o ActiveMQ funcione?

EDIT - adicionando o stacktrace de exceção:

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

questionAnswers(2)

yourAnswerToTheQuestion