Почему сообщения теряются случайным образом из служебной шины? Что я делаю не так? - PullRequest
1 голос
/ 05 марта 2020

Как правильно непрерывно получать сообщения от служебной шины Azure? Я делаю следующее, опрашивая очередь бесконечно.

const receiver = queueClient.createReceiver(ReceiveMode.peekLock);
while (true) {
    const maxMessageCount = 1;
    try {
        if (!receiver.isReceivingMessages()) {
            const message = await receiver.receiveMessages(maxMessageCount);
            if (message.length > 0) {
                /**
                 * Note: we are always receiving one message per call
                 */
                processMessage(message[0]);
            }
        }
    } catch (err) {
        processError(err);
    }
}

Но я попадаю в очень странную ситуацию. Через некоторое время половина сообщений теряется и только половина получает указанный выше получатель. Интересно, что происходит? Есть ли какая-то ошибка в этом коде? Я обычно запускаю скрипт nodejs и останавливаю его, используя Ctrl + c. Есть ли вероятность того, что какой-нибудь deamon listner будет работать в фоновом режиме с указанным выше логом c, даже когда я остановлю скрипт nodejs?

Примечание: я всегда запускаю один скрипт nodejs.

1 Ответ

1 голос
/ 05 марта 2020

Сообщения никогда не теряются с Azure Service Bus. Поскольку ваш код использует режим PeekLock, скорее всего сообщения будут повторены и в конечном итоге окажутся в очереди недоставленных сообщений. Проверьте очередь мертвых писем, чтобы увидеть, есть ли они там. В качестве альтернативы, убедитесь, что время жизни (TTL) не установлено на что-то короткое и приводит к удалению сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...