Я использую azure-sdk-for-js для подписки постоянно работающего процесса Node на подписку служебной шины.По какой-то причине при использовании registerMessageHandler он будет работать в течение недели, прежде чем произойдет сбой без вызова зарегистрированного обработчика ошибок.
Я не обнаружил никаких событий, которые вызываются из ServiceBusClient , SubscriptionClient или Receiver , которые отправляются при сбое подключения.Я могу обойти это, отслеживая, сколько раз вызывается processMessage, и убивая процесс, если он не был вызван недавно, но это похоже на неудачный взлом.Я также мог убивать контейнер каждые 6 дней, но это тоже плохое решение.Я также мог бы опросить свойство isClosed
в Receiver, но я не понимаю, что вызывает закрытие ссылки.
Я не вижу зарегистрированных ошибок ни одного типа, registerMessageHandler просто перестает вызываться через неделю.Я ожидаю, что был бы какой-то обработчик событий, который я мог бы зарегистрировать на уровне Receiver, SubscriptionClient или ServiceBusClient, который сработал бы при закрытии ссылки.
this.azureServiceBusReceiver.registerMessageHandler(
this.processMessage.bind(this),
(err: any) => {
// We should only retry retryable errors, otherwise exit the process as its not healthy
if (!err.retryable) {
logger.error({ err }, `Unretryable error, killing container.`);
this.azureServiceBusReceiver.close().then(() => {
process.exit(1);
});
}
logger.error(
{ err },
`Retryable error reading from Azure ServiceBus`
);
},
{ maxConcurrentCalls: MAXIMUM_CONCURRENCY }
);