1

azure-storage为 node.js和,使用了两个不同的库,fast-azure-storage结果相同。

这就是我所做的:

  1. 使用默认设置创建消息 - 好的。
  2. 从队列中获取消息 - 好的。
  3. 更新消息以重置visibility timeout- 好的。
  4. 处理后删除消息 - 错误:MessageNotFound。

如果我跳过更新,一切都会顺利进行。

那么我做错了什么?

PS尝试分析http流量,似乎完全符合docs。就像这是 Azure 内部问题?也许有人有使用其他语言库更新消息的经验?curl由于 auth 标头的计算,对该服务太不方便了。

4

2 回答 2

1

正如Delete Message文档中提到的,该函数需要Get MessagesUpdate 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);
            }
          });
于 2015-11-20T03:14:38.597 回答
0

“更新消息以重置可见性超时”是什么意思?您是否将隐形超时设置为零?如果是这样,则步骤 4 中的错误是预期的,因为您不允许删除当前可见的消息。

于 2015-11-19T23:34:21.877 回答