如何解决ActiveMQ Artemis:生产者因JMSException AMQ219016而失败
我们有一个带有队列和生产者的ActiveMQ Artemis 2.14.0实例,该实例有时会因以下错误而失败:
javax.jms.JMSException: AMQ219016: Connection failure detected. Unblocking a blocking call that will never get a response
at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:467) ~[artemis-jms-client-all-2.14.0.jar!/:2.14.0]
我们需要了解可能发生这种情况的情况。我们看到这种情况时有发生,我们不知道确切的情况。有没有人经历过这种情况并且可以提供任何解决方案?
解决方法
The documentation很好地说明了为什么可能引发此异常:
如果客户端代码处于对服务器的阻塞调用中,等待响应继续执行,则在发生故障转移时,新会话将不知道正在进行的调用。否则,此呼叫可能会永远挂起,等待永远不会出现的响应。
为避免这种情况,Apache ActiveMQ Artemis将通过使它们抛出
javax.jms.JMSException
(如果使用JMS)或带有错误代码的ActiveMQException
来取消阻止故障转移时正在进行的任何阻塞调用。ActiveMQException.UNBLOCKED
。客户端代码可以捕获此异常并根据需要重试任何操作。如果要取消阻塞的方法是对
commit()
或prepare()
的调用,则事务将自动回滚,Apache ActiveMQ Artemis将抛出javax.jms.TransactionRolledBackException
(如果使用JMS) ,如果使用核心API,则错误代码为ActiveMQException
的{{1}}。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。