Bonjour,

Voici ma problématique :

Je travail sur le développement d'un logiciel en Saas.
Lors de son utilisation, des requêtes vont être envoyées à un web service par plusieurs utilisateurs, parfois en même temps. Seulement ce web service n'accepte que 20 requêtes par minute.

Mon idée est donc de faire une file d'attente qui va stocker les requêtes des utilisateurs, les envoyer une à une jusqu'à 20, puis faire une pause pendant une minute avant de reprendre.

Pour le moment voici la solution que j'ai mis en place :

Dans ma classe principale j'instancie un singleton qui lui même instancie une LinkedTransferQueue et un compteur.
Les requêtes envoyées par les utilisateurs sont reçu dans ma classe principale sous forme de Vector.
Chaque fois qu'une utilisateur envoie des requêtes, j'appelle une méthode du singleton qui reçoit en paramètre le Vector. Cette méthode crée un Thread qui remplit le LinkedTransferQueue avec le contenu du Vector.
Ensuite, j'appelle une seconde méthode du singleton qui crée un Thread qui va lire le LinkedTransferQueue, envoyer une requête, incrémenter le compteur et ainsi de suite. Au bout de 20 requêtes envoyées, je fais un Thread.sleep(60000) puis je remets le compteur à 0.

Je ne suis pas du tout sur de ma façon de faire. En plus, si le compteur est par exemple à 14 et qu'il n'y a pas de requêtes envoyées pendant un certain temps, le compteur va rester à 14 et du coup, seulement 6 requêtes vont être envoyées la prochaine fois avant de faire la pause d'une minute.

Quelle(s) solution(s) et conseil(s) pouvez-vous m'apporter ?

Merci d'avance.