1

node.js と に 2 つの異なるライブラリを使用azure-storagefast-azure-storageて、同じ結果を得ました。

これが私がすることです:

  1. デフォルト設定でメッセージを作成します - わかりました。
  2. キューからメッセージを取得 - わかりました。
  3. メッセージを更新してリセットしますvisibility timeout- OK。
  4. 処理後にメッセージを削除 - エラー: MessageNotFound。

更新をスキップすると、すべてがスムーズに進みます。

それで、私は何を間違っていますか?

PS http トラフィックを分析しようとしましたが、ドキュメントに完全に準拠しているようです。これは Azure 内部の問題ですか? 誰かが他の言語ライブラリを使用してメッセージを更新した経験があるのではないでしょうか? curlauth ヘッダーの計算が原因で、そのサービスには不便です。

4

2 に答える 2

1

ドキュメントのメッセージの削除で言及されているように、この関数には、メッセージの取得またはメッセージの更新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);
          }
        });
    }
  }
});

問題が発生し、コマンドレットで監視できます 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 に答える