Не удается удалить сообщение очереди хранения Azure после его обновления (сообщение не найдено)
Использовал две разные библиотеки для node.js, azure-storage
а также fast-azure-storage
, к тому же результату.
Вот что я делаю:
- Создать сообщение с настройками по умолчанию - хорошо.
- Получить сообщение из очереди - хорошо.
- Обновить сообщение для сброса
visibility timeout
- Хорошо. - Удалить сообщение после обработки - Ошибка: MessageNotFound.
Если я пропускаю обновление, все идет гладко.
Так что я делаю не так?
PS Пытался проанализировать http трафик, похоже, полностью соответствует документации. Как это внутренняя проблема Azure? Может быть, у кого-то есть опыт обновления сообщений с использованием других языковых библиотек? Слишком неудобно curl
этот сервис из-за вычисления заголовка auth.
2 ответа
Как упоминается в документе " Удалить сообщение", для функции требуется параметр popreceipt
который возвращается операцией Get Messages или Update Message.
И после операции обновления сообщения popreceipt
этого сообщения меняется. Так что, если вы код кода выглядит так:
queueSvc.getMessages('myqueue', function(error, result, response){
if(!error){
// Messages retreived
for(var index in result){
var message = result[0];
queueSvc.updateMessage('myqueue', message.messageid, message.popreceipt, 0, {messageText: 'new text'}, function(error, result, response){
if(!error){
// Message updated successfully
console.log('result: '+JSON.stringify(result));
console.log(message.popreceipt)
queueSvc.deleteMessage('myqueue', message.messageid, message.popreceipt, function(error, response){
if(!error){
console.log(response);
// Message deleted
}else{
console.log(error);
}
});
}else{
console.log(error);
}
});
}
}
});
У вас возникнет ваша проблема, и вы можете отслеживать в командлете, мы нашли popreceipt
изменилось после операции обновления.
Таким образом, если вам нужно удалить сообщение после операции обновления, вы должны использовать result
объект, который является новым объектом сообщения после обновления.
queueSvc.deleteMessage('myqueue', result.messageid, result.popreceipt, function(error, response){
if(!error){
console.log(response);
// Message deleted
}else{
console.log(error);
}
});
Что вы имели в виду под словом "Обновить сообщение, чтобы сбросить время ожидания видимости"? Вы установили тайм-аут невидимости на ноль? Если это так, то на шаге 4 ожидается ошибка, поскольку вы не можете удалять сообщения, которые видны в данный момент.