Node.js Can';t在更新azure存储队列消息后删除该消息(未找到消息)
为node.js使用了两个不同的库,Node.js Can';t在更新azure存储队列消息后删除该消息(未找到消息),node.js,azure,azure-storage,azure-storage-queues,azure-node-sdk,Node.js,Azure,Azure Storage,Azure Storage Queues,Azure Node Sdk,为node.js使用了两个不同的库,azure存储和快速azure存储,以获得相同的结果 我是这样做的: 使用默认设置创建消息-确定 从队列中获取消息-确定 更新消息以重置可见性超时正常 处理后删除消息-错误:MessageNotFound 如果我跳过更新,一切都会顺利进行 那我做错了什么 p.S.试图分析http流量,但似乎完全符合标准。这是Azure内部的问题吗? 也许有人有使用其他语言库更新消息的经验?由于auth头的计算,不方便curl该服务。您所说的“更新消息以重置可见性超时”是什么意
azure存储
和快速azure存储
,以获得相同的结果
我是这样做的:
curl
该服务。您所说的“更新消息以重置可见性超时”是什么意思?您是否将不可见超时设置为零?如果是这样,则步骤4中的错误是预期的,因为不允许您查看当前可见的消息。如文档所述,该函数需要or操作返回的参数popReceive
更新消息操作后,此消息的popReceive
。所以,如果您的代码段如下所示:
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中进行监视,我们发现更新操作后,popReceive
已更改
因此,如果需要在更新操作后删除消息,则必须利用更新后的新消息对象result
对象
queueSvc.deleteMessage('myqueue', result.messageid, result.popreceipt, function(error, response){
if(!error){
console.log(response);
// Message deleted
}else{
console.log(error);
}
});
不,我本想再调30秒的。谢谢你,加里!那是我的猜测。我被
快速azure存储
误导了,它忽略了新的PopReceive
。而且官方模块的队列速度非常慢。顺便说一句,它已经在快速azure存储
模块中实现。是的,更新消息
函数似乎会从队列返回新的popreceipt
,实际上,根据您的回答,在我的拉取请求之后:)