سؤال

أريد إطلاق بعض المهام التي سيتم توصيلها بـ IMAP وإحضار بيانات البريد الإلكتروني لتخزينها في قاعدة البيانات.

الآن سيكون لمثل هذه الوظيفة حجم ضخم لدعم الكثيرين IMAP حسابات.أرغب في الاستفادة من إمكانات مجموعة Akka التي يمكنها تشغيل هذه الوظائف في مجموعة محددة مسبقًا من الأجهزة في الشبكة وإعادة المحاكمات في حالة حدوث أخطاء أثناء جلب البيانات من IMAP المضيفين.

أريد إنشاء مجموعة akka والتي سوف تشتعل IMAP جلب وظيفة (عن طريق ممثل؟؟!!).

IMAP هو بروتوكول صعب وقد يفشل في الاتصال بالمضيف البعيد.في مثل هذه الحالة، يجب على الممثل إعادة المحاولة عدة مرات قابلة للتكوين للاتصال والجلب.

في نهاية المطاف ينبغي أن يكون بمثابة بلدي IMAP جلب النهاية الخلفية.

كيف ينبغي أن أفعل ذلك؟

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

المحلول

نحن نستخدم Akka بكثافة، بما في ذلك الاتصال بالرسائل الجديدة من حسابات البريد الإلكتروني للمستخدمين ومعالجتها باستخدام JavaMail/IMAP.يعد التسامح مع الخطأ جزءًا مهمًا من اللغز.إليك تقريبًا كيفية إعداد الواجهة الخلفية لدينا:

  1. تحتوي عقدة المشرف على ممثل يختار المستخدمين من قاعدة البيانات للمعالجة
  2. يقوم الممثلون العاملون في IMAP بإخطار المشرف عندما يكونون جاهزين للعمل (لمزيد من المعلومات حول بنية "سحب العمل"، راجع مشاركة مدونة زميلي رايان تانر: http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling)
  3. يرسل المشرف رسالة ProcessAccount - كائن مخصص يتضمن رمز Gmail OAuth المميز (يمكنك استخدام بيانات اعتماد اسم المستخدم وكلمة المرور التقليدية أيضًا) - إلى عامل IMAP الخامل.
  4. يستخدم عامل IMAP JavaMail لقراءة الرسائل الجديدة ومعالجتها.عند حدوث خطأ، فإنه يرسل رسالة FailedProcessing - كائن مخصص يتضمن رمز خطأ وسلسلة يمكن قراءتها بواسطة الإنسان - مرة أخرى إلى الممثل المشرف.عند النجاح، يتم إرسال CompletedProcessing.
  5. يقوم المشرف بتحديث سجل المستخدم في قاعدة البيانات، بما في ذلك وضع رمز الخطأ في حالة فشل المعالجة.
  6. بالإضافة إلى معالجة الحسابات السليمة بشكل دوري، يقوم المشرف بإعادة محاولة معالجة الحسابات الفاشلة.حالة الاستخدام الخاصة بنا هي أننا نحاول إعادة المعالجة مرة واحدة فقط يوميًا، ولكن يمكنك القيام بذلك بشكل متكرر أكثر.

باستخدام تجميع Akka، نبقي العمال منفصلين عن المشرف.إن الجمع بين هذا النهج وآلية سحب العمل الموضحة أعلاه يبقينا متسامحين نسبيًا مع الأخطاء التي لا يمكن إصلاحها، على سبيل المثال.OutOfMemoryErrors، في العمال.

نصائح أخرى

استخدم جافا ميل.إقرأ ال الأسئلة الشائعة حول بريد جافا.

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