3

キューからメッセージを取得し、ビデオをエンコードしてから、ビデオをストレージにアップロードする単純なビデオ エンコーディング ワーカー ロールがあります。すべてが機能しているように見えますが、エンコードとアップロードが完了した後にメッセージを削除すると、「StorageClientException: 指定されたメッセージが存在しません」というメッセージが表示されることがあります。ビデオは処理されていますが、正しく削除されていないため、メッセージが再びキューに表示されていると思います。メッセージの表示時間を 5 分に設定しましたが、処理に 2 分以上かかった動画はありません。

  • Worker ロールの別のインスタンスがメッセージを処理および削除している可能性はありますか?
  • GetMessage() は、他のワーカー ロールが同じメッセージを取得するのを妨げませんか?
  • キューの設定に何か問題がありますか?
  • 削除時にこのメッセージが見つからない原因は何ですか?

いくつかのコード...

  //onStart() queue setup
  var queueStorage = _storageAccount.CreateCloudQueueClient();
  _queue = queueStorage.GetQueueReference(QueueReference);
  queueStorage.RetryPolicy = RetryPolicies.Retry(5, new TimeSpan(0, 5, 0));
  _queue.CreateIfNotExist();


 public override void Run()
  {
        while (true)
        {
            try
            {
                var msg = _queue.GetMessage(new TimeSpan(0, 5, 0));
                if (msg != null)
                {
                   EncodeIt(msg);
                   PostIt(msg);
                   _queue.DeleteMessage(msg);
                }
                else
                {
                    Thread.Sleep(WaitTime);
                }
            }
            catch (StorageClientException exception)
            {
                BlobTrace.Write(exception.ToString());
                Thread.Sleep(WaitTime);
            }
        }
    }
4

3 に答える 3

3

エンコード プロセスにメッセージ非表示タイムアウト(この場合は 5 分) よりも時間がかかる場合、メッセージは再びキューに表示されます。これにより、2 番目のワーカーが処理を開始します。ただし、2 番目のワーカーが処理を終了するまでに、最初のワーカーが作業を完了し、適切に削除する可能性があります。これにより、2 番目のワーカーはメッセージが存在しなくなるため、削除フェーズで失敗します。

これは、Windows Azure キューによる軽量トランザクション モデルが原因で発生します。メッセージが少なくとも 1 回処理されることは保証されますが(ワーカーがサイレントに失敗した場合でも)、「1 回だけ」の処理は保証されません

あなたのエンコーディングプロセスはべき等で軽量であるように見えるので(エラーが頻繁に表示されないため)、非表示タイムアウトを増やし、この例外を(ステータスコードによって)DeleteMessagesの周りで明示的にキャプチャすることをお勧めします(オプションでプロセス期間を記録して不可視タイムアウトをさらに微調整することができます)。

于 2010-04-27T06:23:21.920 に答える
1

タイムアウトとして設定した5分より長くかかる可能性はありますか?

于 2010-04-27T06:00:48.437 に答える
0

開発、プロダクション、ステージのすべてを同じキューからプルしていたため、奇妙な動作が発生していました。これが犯人だと思います。

于 2010-04-30T21:13:11.153 に答える