ServiceUnavailableError: истекло время ожидания операции для урегулирования сообщения, поскольку я пытаюсь прочитать сообщения в бесконечном цикле - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу продолжить чтение сообщения из очереди служебной шины Azure.Для этого я создаю обработчики сообщений внутри цикла.

Но пока я пытаюсь это сделать, иногда я получаю следующую ошибку:

    Error occurred:  { ServiceUnavailableError: Operation to settle the message has timed out. The disposition of the message may or may not be successful
    at Object.translate (/Users/reverie-pc/R/tests/service-bus/node_modules/@azure/amqp-common/dist/index.js:907:17)
    at Timeout.setTimeout [as _onTimeout] (/Users/reverie-pc/R/tests/service-bus/node_modules/@azure/service-bus/dist/index.js:2413:46)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
  name: 'ServiceUnavailableError',
  translated: true,
  retryable: true,
  info: undefined,
  condition: 'com.microsoft:timeout' }

Я не могу понять причину этого.Вот что я сделал:

const { ServiceBusClient, ReceiveMode, delay } = require("@azure/service-bus");

const connectionString = "Endpoint=sb://some-url";
const queueName = "my-queue";


async function main() {
  const sbClient = ServiceBusClient.createFromConnectionString(connectionString);

  const queueClient = sbClient.createQueueClient(queueName);

  const onMessageHandler = async (brokeredMessage) => {
    console.log(`Received message: ${brokeredMessage.body}`);
    await brokeredMessage.complete();
  };
  const onErrorHandler = (err) => {
    console.log("Error occurred: ", err);
  };


  try {
    for (; ;) {
      const receiver = queueClient.createReceiver(ReceiveMode.peekLock);
      receiver.registerMessageHandler(onMessageHandler, onErrorHandler, { autoComplete: false, maxConcurrentCalls: 10 });
      await delay(5000);
      await receiver.close();
    }
  } catch (err) {
    await queueClient.close();
  } finally {
    await queueClient.close();
    await sbClient.close();
  }
}

main().catch((err) => {
  console.log("Error occurred: ", err);
});

В чем может быть причина этого?Разве это не способ читать сообщения?

...