У меня есть программа на C #, отправляющая сообщения на служебную шину Q Azure (на виртуальной машине). Сообщения должны приниматься приложением node.js (на Mac). Проблема заключается в получении. Поведение, которое я вижу:
- Если я запускаю приложение node.js в новом окне терминов с сообщением, уже находящимся в Q, оно принимается при первом вызове
- Если приложение node.js запущено, следующее сообщение, отправленное в Q, будет получено через 1 мин.
- остановка приложения node.js и перезапуск его в том же окне термина и отправка другого сообщения в Q никогда не получаются
Я знаю, что программа на C # правильно отправляет сообщение, поскольку я проверяю его с помощью сервисной шины сразу после того, как программа подтверждает «отправить». В настоящее время отправка выполняется в синхронном режиме.
Программа Node.js: (работает с последней библиотекой Azure и узлом 8.9.4)
logger.info("Connecting to service bus");
const sbService = azure.createServiceBusService(connectionString);
if (sbService != null) {
sbService.createQueueIfNotExists(queueName, function (err) {
if (err) {
logger.error("Cannot connect to "+queueName+" :: "+ util.inspect(err, { depth: null }));
} else {
logger.info("Connected to Q :: processing begins ");
var intervalID = setInterval(timerElapsed, 5000);
}
});
}
function timerElapsed() {
sbService.receiveQueueMessage(queueName, { isPeekLock: false }, function (err, lockedMessage) {
if (err) {
if (err !== 'No messages to receive') {
logger.error("receiveQueueMessage error states: "+ util.inspect(err, { depth: 2 }));
} else {
console.log('.');
}
} else {
logger.info("received Message: "+ util.inspect(lockedMessage, { depth: 2 }));
}
});
}
[EDIT] - Интересно, что здесь я использовал пример из MS Github пример github с похожими результатами.