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}}。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...