البحث عن إطار / مكتبة تنفيذ الوظائف غير المتزامن العام

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

  •  03-07-2019
  •  | 
  •  

سؤال

أنا أبحث عن إطار تنفيذ Java Java غير متزامن عام يمكنه التعامل مع CallableS أو Runnableس. سيكون مشابهًا لـ java.util.concurrent.ExecutorService, ، (وربما التفاف ExecutorService) ، ولكن سيكون لها أيضًا الميزات التالية:

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

  2. العمل مع UUIDs لتمكين العميل من الحصول على رموز الوظائف والاستفسار عن حالة الوظيفة. (تحت الغطاء ، سيتم استمرار هذه المعلومات في قاعدة بيانات أيضًا.)

لقد بدأت العمل على هذا بنفسي من خلال البناء حولها ExecutorService, ، لكنني أفضل حل خارج الصندوق ، حل المصدر المفتوح ، في حالة وجود واحد.

شيء يمكن أن يعمل في إطار الربيع سيكون مثاليًا.

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

المحلول

يمكنك استخدام كوارتز, وإنشاء خرسانة Job المحول الذي مندوب إلى أ Runnable أو Callable. كوارتز' Job تضيف الواجهة القدرة على الحفاظ على بعض الحالة بين دعوات المهمة. إذا رغبت في ذلك ، يمكن لـ Quartz تخزين الوظائف وحالتها في قاعدة بيانات علائقية ، وتنفيذها على مجموعة قابلة للتطوير من المضيفين.

نصائح أخرى

قد ترغب في النظر إلى كوارتز.

Quartz هو نظام جدولة الوظائف مفتوح المصدر كامل المصدر يمكن دمجه مع أي تطبيق J2EE أو J2SE تقريبًا-من أصغر تطبيق مستقل إلى أكبر نظام للتجارة الإلكترونية. يمكن استخدام الكوارتز لإنشاء جداول بسيطة أو معقدة لتنفيذ عشرات الوظائف أو المئات أو حتى عشرات الآلاف من الوظائف ؛ الوظائف التي يتم تعريف مهامها على أنها مكونات Java القياسية أو EJBs. يتضمن جدولة الكوارتز العديد من ميزات فئة المؤسسات ، مثل معاملات JTA والتجميع.

ألق نظرة على http://www.opensymphony.com/quartz/wikidocs/features.html ومعرفة ما إذا كان لديه بالفعل شيء لك.

من تلك الصفحة:

مع استخدام JDBCJobStore المضمنة ، يتم تخزين جميع الوظائف والمشغلات التي تم تكوينها على أنها "غير متقلبة" في قاعدة بيانات علائقية عبر JDBC

اتجاه آخر قد يكون شيئًا مثل الاستخدام التراكوتا, ، التي لديها القدرة على تجميع الكومة في JVM الخاص بك واستمرت من أجل التوفر. يدعم Terracotta التكامل مع كوارتز إذا كان ذلك مفيدًا من وجهة نظر الجدولة. أيضا ، هناك زميل رئيسي ومراسلة وحدة التكامل قد يكون ذلك مفيدًا أيضًا. التراكوتا مفتوح المصدر.

لمتابعة نقطة Alex ، لن يستمر حل Terracotta في وظائفك في قاعدة البيانات ، فسيكونون ثابتين في متجر الذاكرة الموزع في Terracotta.

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

في الوقت نفسه ، يمنحك نموذجًا لبرمجة POJO الخالص ، لذلك لا يتعين عليك حتى التعامل مع DB TXNS ، ORM وما شابه - ما لم يحدث عبء العمل الخاص بك للتحدث إلى DB (في هذه الحالة لا يوجد Terracotta ساعدك أو يؤذيك هنا ، فهو يساعد فقط على توزيع العمل).

سيساعدك نمط Masterworker على توزيع التمرين على الشبكة ، ويمكنك البدء بسهولة بالغة في استخدام DistributedExecutorService ، ويبدو أن تقديم العمل يشبه هذا:

CompletionService executor = new DistributedCompletionService(new DistributedExecutorService("myTopologyName"));
executor.submit(new MyRunnable(), null);
...
Future f = executor.take();

هذا هو الرابط إلى دليل QuickStart في تطبيق العامل الرئيسي على Terracotta Forge.

ما هو أكثر من ذلك - لا يتطلب Terracotta أن تنفذ قابلة للتسلسل - على الرغم من أنك تستطيع إذا كنت ترغب في ذلك :)

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