Как мне получить текущее сообщение, когда я теряю соединение с TIBCO JMS в java? - PullRequest
2 голосов
/ 31 января 2020

У меня проблемы с потребителем 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 потерян.

...