Meilleure façon de créer une API REST pour longue durée des tâches?
Supposons que j'ai 2 serveurs.
Le premier est un service qui fournit des calculs, ce qui peut durer longtemps (quelques minutes à quelques heures).
La deuxième serveur va utiliser ce service pour avoir quelques données calculées.
Je suis en train de concevoir une API REST pour le premier serveur et c'est très bien. Mais j'aimerais entendre des avis sur la façon de modéliser des notifications lors de la longue durée de la tâche est terminée.
J'ai envisagé de 2 approches:
- Des bureaux de la deuxième serveur demandera chaque maintenant et puis sur le résultat.
- De rappel - Deuxième serveur installation d'un uri pour le premier appel qu'après qu'il est terminé. Mais cela sent un peu à l'API REST.
Qu'en pensez-vous?
OriginalL'auteur Kugel | 2010-09-06
Vous devez vous connecter pour publier un commentaire.
En plus de ce que j'ai déjà répondu dans cette question similaire, je vous conseille d'utiliser le Protocole de Publication Atom pour la notification (que vous pouvez publier sur votre deuxième serveur).
Une brève explication et un lien vers une explication du Protocole de Publication Atom pourrait grandement améliorer cette réponse.
OriginalL'auteur Bruno
Pour votre situation, je choisirais d'interrogation. Lors de la deuxième serveur fait la demande initiale pour créer le travail sur le premier serveur, il doit obtenir une réponse qui a l'url de la page de statut. La deuxième serveur puis les sondages que l'url de tous les 5 à 15 minutes pour vérifier l'état de la tâche. Si le premier serveur qui rend l'url d'un flux RSS ou Atom, puis l'utilisateur peut également pointer leurs lecteurs de flux RSS à la même adresse url et de trouver eux-mêmes si le travail est fait. C'est une véritable victoire lorsque les deux personnes et les machines peuvent obtenir des informations à partir d'une seule source.
OriginalL'auteur Hitesh
Si vous utilisez Python, vous pouvez profiter de RabbitMQ et le Céleri pour faire le travail. Le céleri vous permet de créer un élément dans une file d'attente, puis suspendre l'exécution de tout ce que vous êtes en cours d'exécution à travers (c'est à dire: Django), de sorte que vous pouvez consommer la sortie de la file d'attente du processeur comme il devient disponible. Pas besoin d'interrogation OU rappels.
OriginalL'auteur mattbasta