キューからメッセージを取得し、ビデオをエンコードしてから、ビデオをストレージにアップロードする単純なビデオ エンコーディング ワーカー ロールがあります。すべてが機能しているように見えますが、エンコードとアップロードが完了した後にメッセージを削除すると、「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);
}
}
}