سؤال

أنا باستخدام تخزين طابور أزور لإرسال رسائل البريد الإلكتروني.يتم تخزين رسائل البريد الإلكتروني في تخزين قائمة الانتظار وترسل قائمة الانتظار 20 رسالة بريد إلكتروني في المرة الواحدة.

//Checks for messages inn the queue
foreach (CloudQueueMessage msgin sendEmailQueue.GetMessages(20, TimeSpan.FromSeconds(50)))
   {
        ProcessQueueMessage(msg);

   }

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

private void ProcessQueueMessage(CloudQueueMessage msg)
{
  try
  {
    //We try to send an email
    SendEmail(emailRowInMessageTable, htmlMessageBodyRef, textMessageBodyRef);

  } catch (SmtpException e)
  {
    string err = e.Message;

    //When an error occurs we check to see if the message failed to send certain no. of      
      times
    if (msg.DequeueCount > 10)
    {
      //We delete the message from queue
      sendEmailQueue.DeleteMessage(msg);

      return;
    } else
    {
      //delete from top of queue
      sendEmailQueue.DeleteMessage(msg);

      //insert into end of queue
      sendEmailQueue.AddMessage(msg);

      return;
    }
  }
 }

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

ماذا سيكون أفضل حل في هذه الحالة?

هل كانت مفيدة؟

المحلول 2

كان الحل استخدام قائمة انتظار مختلفة لخوادم SMTP المختلفة وتشغيل كل شيء من دور عامل واحد باستخدام مؤشرات ترابط متعددة.

استخدم الإطار هنا: http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.6.com/12/12/running-multiple-threads-windows.html

نصائح أخرى

ليس عليك حقا حذف الرسالة وإضافتها.بمجرد الرسالة visibility timeout انتهت فترة (50 ثانية في قضيتك) وسوف تظهر تلقائيا مرة أخرى في قائمة الانتظار.من هنا, الخاص بك DequeueCount سوف المنطق أيضا العمل كما هو ديكويد نفس الرسالة و إنكويد مرة أخرى.

يرجى ملاحظة أن طوابير ويندوز أزور هي أفضل جهد فيفو ...لذلك ليس من الضروري دائما وسيتم اختيار الرسائل على أساس وقت إضافتها.يمكنك القيام ببعض الأشياء:

  • قلل عدد عمليات إعادة المحاولة (لديك حاليا 10 ، يمكنك تقليلها إلى 5) أو
  • تحقق من الاستثناء الفعلي.إذا فشلت العملية بسبب بيانات اعتماد غير صحيحة ، فستفشل في المرة القادمة والمرة التالية بعد ذلك.لا فائدة من إعادة محاولة هذه الرسالة.يمكنك فقط نقل هذه الرسالة إلى قائمة انتظار السموم حتى تتمكن من فحص الرسالة لاحقا.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top