Я установил автономный экземпляр HornetQ, который работает локально. Для тестирования я создал потребителя, использующего API HornetQ core , который будет получать сообщение каждые 500 миллисекунд.
Я сталкиваюсь со странным поведением на стороне потребителя, когда мой клиент подключается и читает все сообщения из очереди, и если я принудительно выключил это (без надлежащего закрытия сеанса / соединения), то при следующем запуске этого потребителя он снова будет читать старые сообщения из очереди. Вот мой потребительский пример:
// Код потребителя HornetQ
public void readMessage() {
ClientSession session = null;
try {
if (sf != null) {
session = sf.createSession(true, true);
ClientConsumer messageConsumer = session.createConsumer(JMS_QUEUE_NAME);
session.start();
while (true) {
ClientMessage messageReceived = messageConsumer.receive(1000);
if (messageReceived != null && messageReceived.getStringProperty(MESSAGE_PROPERTY_NAME) != null) {
System.out.println("Received JMS TextMessage:" + messageReceived.getStringProperty(MESSAGE_PROPERTY_NAME));
messageReceived.acknowledge();
}
Thread.sleep(500);
}
}
} catch (Exception e) {
LOGGER.error("Error while adding message by producer.", e);
} finally {
try {
session.close();
} catch (HornetQException e) {
LOGGER.error("Error while closing producer session,", e);
}
}
}
Может кто-нибудь сказать мне, почему он работает так, и какую конфигурацию я должен использовать на стороне клиент / сервер, чтобы, если сообщение, прочитанное потребителем, удаляло это из очереди?