Question

Notre application Web de serveur traitera les travaux demandés par les demandes d'API REST.

Idéalement, si le serveur meurt pendant un travail (c'est-à-dire: si le fichier est extrait), le travail devrait reprendre ou redémarrer au démarrage.

Un moyen très pratique de traiter ces travaux consiste à utiliser un thread séparé en utilisant certaines des classes d'utilitaires simultanées de Java 5. Le seul problème est qu'en cas d'échec, vous devez avoir noté les détails du travail et créé un processus qui: lit ces détails au démarrage et reprend les travaux. Cela semble être une douleur à faire.

Une autre approche consiste à utiliser une file d'attente dans laquelle l'utilisateur fait une demande, écrit dans la file d'attente, puis lit dans la file d'attente, effectue le travail et supprime le message uniquement lorsque le travail est terminé. Cela facilite la reprise du travail au démarrage car le serveur lira simplement de la file d'attente au démarrage et reprendra le processus.

Existe-t-il de meilleures approches pour ce scénario?

Était-ce utile?

La solution

Étant donné que vous avez spécifié REST, vous avez évidemment des clients qui font des demandes et exigent des résultats. Pourquoi ne pas imposer le fardeau de déterminer s’ils ont terminé les clients eux-mêmes .

par exemple. un client fait une demande. Si cela donne un résultat, tout va bien. Si, toutefois, le client détecte que le serveur est terminé (via une déconnexion prématurée sur la connexion HTTP), il peut alors revenir en arrière et réessayer ultérieurement. Si vous le souhaitez, vous pouvez mettre en œuvre diverses stratégies de nouvelle tentative (par exemple, nouvelle tentative sur un hôte différent, abandon après "n" tentatives, etc.).

Ainsi, les clients conservent la connaissance de ce dont ils ont besoin (comme il se doit de toute façon, vraisemblablement) et vos serveurs sont sans état, ce qui est beaucoup plus facile à gérer.

Autres conseils

J'utiliserais Quartz (doté de fonctions de basculement) pour gérer vos travaux.

PS: Je préférerais me tromper, mais, après avoir lu vos dernières questions, j'ai l’impression que vous construisez quelque chose de trop compliqué ou de faux sur le plan conceptuel. Il y a trop d'architecture, ça sent IMHO.

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