2010-10-15 6 views
0

Existe-t-il des meilleures pratiques qui dictent la durée maximale entre un appel asynchrone et sa réponse correspondante.Délai maximum entre un appel asynchrone et une réponse (services Web)

Fondamentalement, j'ai un processus qui prend beaucoup de temps à s'exécuter (par exemple: 5 minutes). Option 1: Je pourrais exposer le processus comme un appel asynchrone. Dans ce cas, l'utilisateur appelle mon service, puis à un moment ultérieur, je réponds avec un statut de processus.

Option 2 L'autre façon je pourrais le mettre en œuvre est de configurer le système tel qu'il existe une opération à sens unique sur mon service web qui commence le processus et retourne immédiatement un identifiant pour le processus. Je pourrais alors exiger que le consommateur fournisse une opération à sens unique, que je puisse appeler et faire rapport lorsque le processus sera terminé.

La première option est plus facile car je n'ai rien à demander à l'appelant. La seconde semble meilleure car je peux rapporter à tout moment (5 minutes à des années plus tard).

Comme je l'ai un contrôle complet sur l'appelant et son un service en interne, je me penche vers l'option 2.

Je me demande s'il y a des limites de temps imposées aux appels asynchrones (peuvent-ils durée des jours? sinon quelle est la meilleure pratique). L'option 2 est-elle un modèle standard utilisé?

Les références seraient extrêmement utiles.

Répondre

2

L'option 2 est préférable car elle est davantage pilotée par les événements.

Cependant, il existe une Option # 3. Le client émet une requête au serveur. Le serveur met en file d'attente la requête et répond avec l'ID. Le client vérifie de temps en temps, en passant l'identifiant de la demande, pour voir s'il est terminé. De cette façon, vous n'avez pas besoin que le client soit disponible lorsque la requête est terminée.

Je combinerais probablement les options 2 et 3 et laisserais le client choisir s'il veut qu'un événement soit déclenché de son côté ou s'il veut simplement revenir plus tard.

MISE À JOUR
Rajah a posé des questions sur la durée maximale entre la demande et la réponse async. Pour une application WEB, elle est généralement mesurée en secondes. La plupart des serveurs ont des valeurs de délai d'attente qui sont généralement définies par défaut dans la plage de 30 secondes. Personnellement, je pense que c'est trop long.

Considérons qu'un appel asynchrone nécessite que le canal de communication entre le client et le serveur soit ouvert pendant la durée. Combien de ces canaux un seul serveur peut-il gérer? Plus précisément, combien de canaux devrez-vous gérer au fur et à mesure des demandes? Cela peut devenir tout à fait scandaleux même si vous contrôlez les deux extrémités. Quel que soit l'hébergement de vos services va déterminer le temps maximum pour garder une demande ouverte. Encore une fois, chaque serveur que j'ai vu mesure cela en quelques secondes.

+1

L'option 3 aurait mon vote pour tout processus qui peut éventuellement prendre plus de quelques secondes. – Wrikken

+0

C'est une bonne réponse. Et je marquerais cela répondu - mais la partie qui n'a pas été répondue est: quel est le temps maximum entre la demande asynchrone et la réponse. –

Questions connexes