StorageClientException: الرسالة المحددة غير موجودة؟

StackOverflow https://stackoverflow.com/questions/2718559

  •  01-10-2019
  •  | 
  •  

سؤال

لديّ دور عامل ترميز الفيديو البسيط الذي يسحب الرسائل من قائمة انتظار يشفر مقطع فيديو ثم يقوم بتحميل الفيديو إلى التخزين. يبدو أن كل شيء يعمل ولكن في بعض الأحيان عند حذف الرسالة بعد الانتهاء من الترميز وتحميل أحصل على ملف "StorageClientException: الرسالة المحددة غير موجودة." على الرغم من معالجة الفيديو ، أعتقد أن الرسالة تظهر في قائمة الانتظار لأنه لم يتم حذفها بشكل صحيح. لديّ رسالة زمالة على 5 دقائق ، لم تتخذ أي من مقاطع الفيديو أكثر من 2 للمعالجة.

  • هل من الممكن أن يكون هناك مثال آخر لدور العامل هو معالجة وحذف الرسالة؟
  • ألا يمنع 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);
            }
        }
    }
هل كانت مفيدة؟

المحلول 3

كان لدي تطوري وإنتاجي ومرحلة كلها تسحب من نفس قائمة الانتظار التي تسببت في بعض السلوك الغريب. أعتقد أن هذا هو الجاني.

نصائح أخرى

هل من الممكن أن يستغرق الأمر وقتًا أطول من الدقائق الخمس التي وضعتها كمهلة؟

إذا تستغرق عملية الترميز وقتًا أطول من مهلة الخفاء (5 دقائق في قضيتك) ، ثم ستظهر الرسالة في قائمة الانتظار مرة أخرى. سيؤدي ذلك إلى بدء تشغيل العامل الثاني من معالجته. ومع ذلك ، هناك احتمالات أنه بحلول الوقت الذي ينتهي فيه العامل الثاني من المعالجة ، سيتم بالفعل العامل الأول مع العمل ، وحذفه بشكل صحيح. سيؤدي ذلك إلى فشل العامل الثاني في مرحلة الحذف ، لأن الرسالة لم تعد موجودة بالنسبة له.

يحدث هذا بسبب طراز معاملات خفيف الوزن بواسطة قوائم قوائم Windows Azure. يضمن أن ستتم معالجة الرسالة مرة واحدة على الأقل (حتى لو فشل العامل بصمت) ، ولكن لا يضمن المعالجة "مرة واحدة فقط".

نظرًا لأن عملية الترميز الخاصة بك تبدو خفيفة وخفيفة الوزن (نظرًا لأن الخطأ يظهر بشكل غير متكرر) ، فإنني فقط أنصح بذلك زيادة مهلة الخفاء و صريح التقاط هذا الاستثناء (حسب رموز الحالة) حول الحذف (تخطيا تسجيل مدة العملية من أجل أن تكون قادرًا على تعديل مهلة الخفاء بشكل أكبر).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top