这个问题已经在Apache ActiveMQ Artemis 2.17.0中修复了。升级到该版本或更高版本即可解决。 如果您无法升级到新版,则可以使用以下代码示例解决该问题。在关闭当前连接前,先手动取消订阅所有的目的地,这将防止ActiveMQ Artemis在关闭以前自动取消订阅。
Connection connection = null;
Session session = null;
MessageConsumer consumer = null;
try {
// 创建连接和会话
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建要订阅的目的地和消费者
Destination destination = session.createQueue("myQueue");
consumer = session.createConsumer(destination);
// 消息处理代码...
} finally {
// 首先取消订阅所有的目的地
if (session != null) {
try {
session.unsubscribe("myQueue");
} catch (Exception e) {
// 处理异常
}
}
// 最后关闭连接和消费者
if (consumer != null) {
try {
consumer.close();
} catch (Exception e) {
// 处理异常
}
}
if (session != null) {
try {
session.close();
} catch (Exception e) {
// 处理异常
}
}
if (connection != null) {
try {
connection.close();
} catch (Exception e) {
// 处理异常
}
}
}