Я хочу продолжить чтение сообщения из очереди служебной шины 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);
});
В чем может быть причина этого?Разве это не способ читать сообщения?