为node.js azure-storage
和fast-azure-storage
使用了两个不同的库,结果相同。
这就是我的所作所为:
visibility timeout
的消息 - 确定。如果我跳过更新,一切顺利。
那么我做错了什么?
P.S。试图分析http流量,它似乎完全符合docs。像这是一个Azure内部问题?
也许有人有使用其他语言库更新消息的经验?由于计算了auth标头,curl
该服务太不方便了。
答案 0 :(得分:1)
正如文档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);
}
});
答案 1 :(得分:0)
“重置可见性超时的更新消息”是什么意思?你是否将隐形超时设置为零?如果是,则预计会出现第4步中的错误,因为您不允许delete当前可见的消息。