gestion de file d'attente

footballwoman
gestion de file d'attente

Bonjour,
j'ai à nouveau un petit conseil à vous demander à propos des web services!
Voila, je souhaite développer, coté serveur, un gestionnaire de file d'attente du web service : lorsque des clients utilisent mon web service, je voudrais les placer dans une file d'attente si une exécution est en cours (car elle peut prendre du temps...) et leur indiquer leur place dans la file d'attente.
Est ce que quelqu'un à une idée? (je programme en java!)
Merci d'avance
footballwoman

fredericmazue

Quote:
footballwoman [...] je programme en java!

Faute! Penalty même :twisted:

Bon c'est une vraie grosse question que tu poses là. Sur le principe c'est tout simple, pour le coder c'est autre chose.
Le principe: un client, au lieu de se connecter directement à ton WebService se connecte à un écouteur (à développer) qu'il prend pour le WS. Cet écouteur soit met en queue et informe le client, soit redirige sur le WebService s'il est disponible. Si indisponible la requete est placée dans un conteneur. Une LinkedList par exemple. Et selon le nombre d'éléments (=de requêtes) dans la liste, tu peux estimer un temps de réponse et alors tu renvoies une réponse au client pour l'informer de l'attente.

Bref il faut un intermédiaire entre le client et le WS. C'est l'idée.
Voilà, yapluka coder :)

footballwoman

Quote:
Bon c'est une vraie grosse question que tu poses là. Sur le principe c'est tout simple, pour le coder c'est autre chose.

je m'en doutais !

Merci pour les infos, j'ai compris le principe, mais j'ai encore quelques doutes :
- il faut que je crée un thread cote serveur à chaque appel?, soit le thread se met en attente, soit il s'execute?
- quand une requete est sortie de la file d'attente, comment la renvoyer au bon client? comment trouver l'adresse du client qui a fait la requete?

Merci encore

fredericmazue

Quote:
- il faut que je crée un thread cote serveur à chaque appel?, soit le thread se met en attente, soit il s'execute?

C'est un choix à faire. Qui peut dépendre du nombre de hits attendus sur le WS, de la capacité de la machine qui heberge, de tes préférences (ou celles de ton chef) et peut être aussi de tout le code qu'il y a autour. Je crois me rappeler que ce que tu fais s'insère dans un grand projet.
Il n'y a pas de réponse "il faut"... sauf que.... il faut... y réfléchir soigneusement avant de se décider pour une solution. La conception logicielle c'est un art qui doit aussi savoir s'adapter aux circonstances.

Quote:
- quand une requete est sortie de la file d'attente, comment la renvoyer au bon client? comment trouver l'adresse du client qui a fait la requete?

Ca c'est facile ;)
Ta "moulinette intermédiaire" entre le client et le WS, elle va écouter un socket et un socket c'est défini par une IP et un Port. Tu stockes ça (par exemple dans une structure de données rangée dans la LinkedList dont on a déjà parlé) au moment où ça arrive et tu t'en sers pour renvoyer la réponse :)
Attention au piège. Toi tu vas écouter le port 80 pour un WS, mais ça ne veut pas dire que le client émet sur son port 80. Au contraire même :)
Donc tu dois bien stocker l'IP ET le port
fredericmazue

Je pensais à toi aujourd'hui et je me suis dit que tu aurais aussi à gérer d'éventuels problèmes de timeout sur les sockets

footballwoman

bonjour,
merci pour tes réponses qui m'ont éclaircie...
En fait, on a décidé de créer un second web service qui serait en fait le gestionnaire de jobs,
mais le client ne sait pas qu'il y a un gestionnaire de jobs.
Lorsqu'une requete est envoyée, elle est en fait envoyé au gestionnaire qui se charge de la mettre dans une file d'attente ou de l'envoyer au "vrai" web service qui l'executera.
Le gestionnaire doit aussi permettre de référencer de nouveau serveur d'application ou d'en supprimer comme on le souhaite.
Que penses-tu de cette solution?

fredericmazue

J'en pense du bien vu que globalement c'est ce que je voulais dire :)

imad1981
gestion de filedattente

bonjour

est ce que vous avez realiser ce projet ,j ai une proposition pour vous