У меня проблемы с потребителем JMS Tibco в Java.
Управление очередями осуществляется другой компанией, и они не хотят вносить изменения со своей стороны.
Я должен читать сообщения одно за другим, чтобы потом обработать их в другом сервисе. Обычно я могу читать сообщения без проблем, но если я потеряю соединение и снова подключусь, прочитанное сообщение исчезнет и снова не будет доступно. Следующее следующее сообщение, которое не было прочитано, возвращается в очередь через 15 минут, но не текущее.
Я использую эту функцию для чтения.
if (isConnected) {
try {
message = msgConsumer.receiveNoWait();
//message=msgConsumer.receive();
if (message != null) {
TextMessage txtMessage = (TextMessage) message;
out.SetProperty("message", txtMessage.getText());
out.SetProperty("read", true);
} else {
out.SetProperty("read", false);
}
} catch (JMSException e) {
connection.close();
errorMessage = e.getMessage();
errorCode = "666";
throw new JMSException(e.getMessage());
}
}
Я использую:
javax.jms.*;
com.tibco.tibjms.TibjmsConnectionFactory;
Например, исходное сообщение очереди:
<message>1<message>
<message>2<message>
<message>3<message>
<message>4<message>
<message>5<message>
, и я теряю соединение в течение 2 секунд, когда я читаю сообщение № 2. Следующие сообщения, которые я читаю, это 4 и 5, а затем 3, которые я могу прочитать через 15 минут. Но номер 2 потерян.