IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Création d'une file d'attente


Sujet :

Développement Web en Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Création d'une file d'attente
    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.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Points : 203
    Points
    203
    Par défaut
    Salut,

    Dans une des libraries de Google, il existe un objet RateLimiter qui je pense fera parfaitement l'affaire dans ton scenario :
    API : https://guava.dev/releases/19.0/api/...teLimiter.html
    Tutorial : https://www.baeldung.com/guava-rate-limiter

    Tu devra sans doute restreindre le nombre de requetes entrantes dans ton systeme car ta queue n'est pas extensible a l'infini (Ta limite etant la quantite de memoire disponible pour ton programme).

    Je pense egalement qu'utiliser un thread different pour inserer les elements d'un vector dans ta queue n'est pas indispensable.
    Quoi qu'il en soit tu devras utiliser un nombre de threads fixe que sera au maximum le nombre de cores disponibles pour ton programme, recuperable par le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().availableProcessors()
    et de preference geres a l'aide d'un Executor : https://www.baeldung.com/java-executor-service-tutorial

    Good luck !

  3. #3
    Membre habitué Avatar de samaury
    Homme Profil pro
    Chevalier Jedi
    Inscrit en
    Mars 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chevalier Jedi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2008
    Messages : 114
    Points : 141
    Points
    141
    Par défaut
    Essaie aussi de voir si, au lieu d'utiliser un timer pour lancer les nouvelles tâches tu ne pourrais pas plutôt utiliser un callback depuis tes threads.
    Pensons bien, pensons bio

Discussions similaires

  1. Insertion dans une file d'attente MQSERIS
    Par a_karim_fr dans le forum z/OS
    Réponses: 3
    Dernier message: 13/10/2009, 18h14
  2. gerer une file d'attente de traitement ?
    Par dremos dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 31/12/2008, 09h45
  3. [D5] Création d'une fenêtre d'attente
    Par MelkInarian dans le forum Delphi
    Réponses: 11
    Dernier message: 20/03/2007, 15h36
  4. [Tableaux] créer une file d'attente en php
    Par gaetan.tranvouez dans le forum Langage
    Réponses: 12
    Dernier message: 01/06/2006, 18h49
  5. Gestion d'une file d'attente
    Par jesus144 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/09/2005, 19h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo