2015-08-10 4 views
6

Я получаю исключение JMS и кажется, что очередь не выходит или не заканчивает задачу.JMSException InterruptedIOException - поток производителя прерывается

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

javax.jms.JMSException: java.io.InterruptedIOException 
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62) 
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1266) 
at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1350) 
at org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:495) 
at com.vtech.mqservice.response.SendResponse.sendResponseToQueue(SendResponse.java:44) 


Caused by: java.io.InterruptedIOException 
at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:102) 
at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40) 
at org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:74) 
at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:79) 
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1244) 
... 0 more 

Пожалуйста, помогите мне определить причину, по которой поток производителя будет прерван.

Я обновлю версию activemq до последней версии и обновить результаты.

Просьба указать мне в правильном направлении?

Update: ActiveMQ версия используется в ActiveMQ-все-5.3.0.jar

ответ

1

Я гугле ваше исключение не получил точного ответа, но потом я пошел через исходный код для WireFormatNegotiator из ActiveMQ.

Вы можете найти здесь, http://alvinalexander.com/java/jwarehouse/activemq/activemq-core/src/main/java/org/apache/activemq/transport/WireFormatNegotiator.java.shtml

public void oneway(Object command) throws IOException { 
    try { 
     if (!readyCountDownLatch.await(negotiateTimeout, TimeUnit.MILLISECONDS)) { 
      throw new IOException("Wire format negotiation timeout: peer did not send his wire format."); 
     } 
    } catch (InterruptedException e) { 
     Thread.currentThread().interrupt(); 
     throw new InterruptedIOException(); 
    } 
    super.oneway(command); 
} 

Я думаю, ваша проблема как-то о "negotiateTimeout". Возможно, вы должны установить определенное количество тайм-аута или удалить его, если вы поместите его раньше.

0

У меня такое же исключение, и выяснилось, что JVM MaxPermSize низкий. Я увеличил размер до 1024 Мб, и он сработал.

Смежные вопросы