更新后无法删除azure色的存储队列消息(消息未find)
使用node.js, azure-storage
和fast-azure-storage
两个不同的库,得到相同的结果。
这就是我所做的:
- 使用默认设置创build消息 – 确定。
- 从队列中获取消息 – 好的。
- 更新消息重置
visibility timeout
– 确定。 - 处理后删除消息 – 错误:MessageNotFound。
如果我跳过更新,一切顺利。
那么我做错了什么?
PS试图分析httpstream量,似乎完全符合文档 。 像这是一个Azure的内部问题? 也许有人有使用其他语言库更新消息的经验吗? 由于auth头文件的计算太麻烦了。
当文档Delete Message提到时,该函数需要由Get Messages或Update Message操作返回的参数popreceipt
。
并且在更新消息操作之后,该消息的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); } }); } } });
你会发生你的问题,你可以监视cmdlet,我们发现更新操作后更改popreceipt
。
因此,如果在更新操作之后需要删除消息,则必须在更新后利用作为新消息对象的result
对象。例如,
queueSvc.deleteMessage('myqueue', result.messageid, result.popreceipt, function(error, response){ if(!error){ console.log(response); // Message deleted }else{ console.log(error); } });
“更新消息重置可见性超时”是什么意思? 您是否将隐形超时设置为零? 如果是这样,第4步中的错误是预期的,因为您不允许删除当前可见的消息。