Ich habe eine einfache Videocodierungs-Arbeiterrolle, die Nachrichten aus einer Warteschlange abruft, ein Video codiert und dann das Video in den Speicher hochlädt. Alles scheint zu funktionieren, aber gelegentlich erhalte ich beim Löschen der Nachricht nach dem Kodieren und Hochladen eine "StorageClientException: Die angegebene Nachricht existiert nicht." Das Video wird zwar verarbeitet, aber ich glaube, dass die Nachricht in der Warteschlange wieder auftaucht, weil sie nicht korrekt gelöscht wird. Ich habe die Sichtbarkeit der Nachricht auf 5 Minuten eingestellt, keines der Videos hat länger als 2 Minuten für die Verarbeitung gebraucht.
- Ist es möglich, dass eine andere Instanz der Worker-Rolle die Nachricht bearbeitet und die Nachricht löscht?
- Verhindert die Funktion GetMessage() nicht andere Arbeiterrollen daran, die die gleiche Nachricht?
- Mache ich etwas falsch in der Einrichtung meiner Warteschlange?
- Was könnte die Ursache für diese Meldung sein? beim Löschen nicht gefunden wird?
etwas Code...
//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);
}
}
}