接收方不可用时 ActiveMQ 消息丢失

ActiveMQ message lost when receiver is not available

我正在使用 activeMQ 进行消息传递。当发件人和收件人都可用时,我成功收到了消息。但是当我关闭接收器并重新启动时,队列中的消息不会再次接收到接收器。我需要做任何配置吗? 我已经增加了如下的生存时间以避免会话过期。

这是我的发件人代码的样子。

Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic(topic);
MessageProducer producer = session.createProducer(destination);
producer.setTimeToLive(18000000L);
TextMessage message = session.createTextMessage(customMessage.getContent());
producer.send(message);

您观察到的是预期的行为。由于您要将消息发送到 JMS topic,因此您将受制于 publish/subscribe 语义。 Publish/subscribe 语义规定消息仅放置在有效订阅中。当您的订阅者离线时,它在代理上没有有效的订阅来接收消息,因此它会错过离线时发送给它的消息。

您可以使用 durable 订阅者在订阅者离线时接收消息,或者您可以使用传统的 JMS queue.