更新后无法删除azure色的存储队列消息(消息未find)

使用node.js, azure-storagefast-azure-storage两个不同的库,得到相同的结果。

这就是我所做的:

  1. 使用默认设置创build消息 – 确定。
  2. 从队列中获取消息 – 好的。
  3. 更新消息重置visibility timeout – 确定。
  4. 处理后删除消息 – 错误: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步中的错误是预期的,因为您不允许删除当前可见的消息。