مشكلة ارسال بريد يرسل اكثر من مرة notification قد تصل للمئة

A.Turki • منذ 4 سنوات

احيانا يحدث مشكلة في الانظمة وترسل عدد كبير من الرسائل الى احد الاشخاص المسجلين في النظام مما يوقعنا في الحرج

كيف اعمل مراقبة واحد من هذا الخطأ 

هل يوجد مثلا اداة monitoring مثلا اضيفها تعمل منع لارسال البريد نفسه اكثر من مرة

المهم ان اضمن ان رسالة واحدة تصل للعميل 

 

* ملاحظة الكود البرمجي سليم ولا مشكلة فيه والانظمة تعتمد على .net 

وشكرا لكم 

كلمات دليلية: #tool

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (1)

Hussain Aljabri • منذ 4 سنوات

اخي, فيه طرق كثيييره لحل المشكله ذي.

لاكن انا بطريقتي راح اقلك كيف ممكن اتعامل معاها اتمنى تفيدك اخي.

اول خطوة ارتب الكود الى 3 مراحل. 

1- طلب ارسال,  2- ارسال فعلياً, 3- اشعار بأن النظام ارسل. حلو؟

في "طلب ارسال" تتجمع طلبات الارسال مثلا في Queue او Array جاهزه للتنفيذ.

في "ارسال فعلياً" كود يستخدم تقنية "synchronization" البرمجية (موجودة بأغلب اللغات) الان سوف اشرح لك لماذا Synchronized Functions

الكود يسيرله execute بأكثر من Thread حلو؟ فلذلك هناك احتمال اكثر من Thread يسوي execute للكود حق الارسال وهنا تسير مشكلتك.

حلها هو ان نتأكد 100% ان بس 1 Thread يسوي execute للكود حق الارسال. وهذا يسير بإستخدام Synchronized functions.

وراح تتأكد ان مافيه ارساليه تتعارض مع ارساليه, ولا تكرار للأرساليات.  

 

مثلا:

بترسل لـ احمد, وفيصل. فترسل طلب بإرسال تهنئة لأحمد, وتعزية لفيصل. هذي الطلبات تروح داخل Queue او Array. ثم "ترسل فعلياً" بدال ما ياخذ كلن من احمد وفيصل ويرسلهم في نفس الوقت. نستخدم synchronized functions مع Boolean حتى نتاكد تم الارسال لاحمد, ثم بعد نحذف احمد من الArray او Queue. ثم نعاود الارسال.

مثال بJava :


class Hussain extends Thread 
{ 
    private String msg; 
    private Thread t; 
    Sender  sender; // Sender object
  
    // Recieves a message object and a string 
    // message to be sent 
    Hussain(String m,  Sender obj) 
    { 
        msg = m; 
        sender = obj; 
    } 
  
    public void run() 
    { 
        // Only one thread can send a message 
        // at a time. 
        synchronized(sender) 
        { 
        // synchronizing the snd object 
            sender.send(msg); 
        } 
    } 
} 

 

اتمنى افدتك. اخوك حسين.

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !