Recherche de framework / bibliothèque d'exécution de travail Java asynchrone générique

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

  •  03-07-2019
  •  | 
  •  

Question

Je recherche un cadre d’exécution de travaux Java asynchrone générique qui puisse gérer les Callable ou les Runnable . Ce serait similaire à java.util.concurrent.ExecutorService , (et éventuellement wrap ExecutorService ), mais il aurait également les fonctionnalités suivantes:

  1. Possibilité de conserver des travaux dans une base de données en cas de panne de l'application pendant le traitement d'un travail et de pouvoir redémarrer les travaux inachevés. (Je comprends que mon travail devra peut-être implémenter Serializable , ce qui est correct.)

  2. Utilisez les UUID pour permettre au client d’obtenir des jetons de travail et de demander des informations sur le statut du travail. (Sous le capot, ces informations seraient également conservées dans une base de données.)

J'ai commencé à travailler moi-même en construisant autour de ExecutorService , mais je préférerais une solution open source prête à l'emploi, s'il en existe une.

Quelque chose qui pourrait fonctionner dans le cadre du printemps serait idéal.

Était-ce utile?

La solution

Vous pouvez utiliser Quartz et créer un élément concret Job adaptateur qui délègue à un exécutable ou appelable . L’interface Job de Quartz ajoute la possibilité de conserver un certain état entre les invocations d’une tâche. Si vous le souhaitez, Quartz peut stocker les travaux et leur état de manière durable dans une base de données relationnelle, puis les exécuter sur un cluster d'hôtes évolutif.

Autres conseils

Vous pouvez consulter Quartz .

  

Quartz est un système de planification de travaux open source complet qui peut être intégré à ou utilisé pratiquement avec n'importe quelle application J2EE ou J2SE - de la plus petite application autonome au plus grand système de commerce électronique. Quartz peut être utilisé pour créer des planifications simples ou complexes permettant d'exécuter des dizaines, des centaines, voire des dizaines de milliers d'emplois. travaux dont les tâches sont définies en tant que composants Java standard ou EJB. Quartz Scheduler comprend de nombreuses fonctionnalités d'entreprise, telles que les transactions JTA et la mise en cluster.

Consultez http://www.opensymphony.com/quartz/wikidocs /Features.html et voyez s’il a déjà quelque chose pour vous.

À partir de cette page:

  

Avec l'utilisation du JDBCJobStore inclus, tous les travaux et déclencheurs configurés en tant que "non volatiles". sont stockés dans une base de données relationnelle via JDBC

Une autre direction pourrait être quelque chose comme utiliser Terracotta , qui permet de regrouper des segments de mémoire dans votre machine virtuelle et de les conserver pendant disponibilité. Terracotta prend en charge l'intégration avec Quartz si cela est utile du point de vue de la planification. . En outre, un module d'intégration maître-ouvrier et de messagerie pourrait être utile aussi. La terre cuite est open source.

Pour faire suite au point soulevé par Alex, une solution Terracotta ne conserverait pas vos travaux dans la base de données, ils seraient persistants dans le magasin de mémoire distribuée de Terracotta.

Terracotta conservant le stockage de la mémoire sur le disque, il s'agit d'une version plus efficace de l'insertion de ces travaux dans la base de données.

En même temps, il vous donne un modèle de programmation pur POJO, de sorte que vous n’aurez même pas à traiter avec DB txns, ORM, etc. - sauf si votre charge de travail particulière arrive à parler à la base de données (dans ce ne vous aide pas et ne vous fait pas mal ici, cela aide simplement à répartir le travail).

Le modèle MasterWorker vous aidera à répartir le travail sur la grille. Vous pouvez très facilement commencer à utiliser DistributedExecutorService. La soumission du travail ressemble à ceci:

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

Voici le lien vers Guide de démarrage rapide dans le maître-ouvrier mise en œuvre sur la forge en terre cuite .

De plus, Terracotta ne nécessite pas l’implémentation de Serializable - bien que vous puissiez le faire si vous le souhaitez:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top