我收到 JMS 异常,队列似乎没有退出或没有完成任务。
消息是异步的,大部分时间都可以正常工作,但有时会出现异常。似乎听众一直在听另一边,但在生产者那边得到了这个异常。
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 版本升级到最新版本并更新结果。
请指出正确的方向?
更新:正在使用的ActiveMQ版本是activemq-all-5.3.0.jar
最佳答案
我用谷歌搜索了你的异常没有得到准确的答案,但后来我查看了 ActiveMQ 的 WireFormatNegotiator 的源代码。
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”有关。也许您应该设置一定的超时时间,或者如果您之前设置过超时则将其删除。
关于java - JMSException InterruptedIOException - 生产者线程被中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31927655/