Re: "throttled" ExecutorService?

Rémi Forax <[email protected]> Wed, 25 May 2011 19:23:46 +0200
Newsgroups gmane.comp.java.french.general
Message-ID <[email protected]>
On 05/25/2011 07:18 PM, Cédric Beust ? wrote:
> La façon la plus simple à mon avis est de créer ta propre Queue qui 
> implémente tes contraintes et de la passer à un Executor standard. Pas 
> besoin de créer ton propre Executor.
>
> Quelque chose comme ça:
>
> public class ThrottledQueue<E> extends LinkedBlockingQueue<E> {
>
> @Override
>
> public boolean offer(E e) {
>
>   }
>
>
> @Override
>
> public boolean offer(E e, longtimeout, TimeUnit unit)
>
> throwsInterruptedException {
>
>   }
>
>
> @Override
>
> public E take() throwsInterruptedException {
>
>   }
>
> }
>
>
> Dans offer(), tu stockes l'information dont tu as besoin pour décider 
> (par exemple, l'heure actuelle) et ensuite, tu appelles super.offer().
>
> Dans take(), tu fais tes vérifications:
>
>     * Différence de temps entre heure actuelle et la timestamp la plus
>       ancienne.
>     * Nombre de requêtes actuellement en cours d'exécution.
>
> Si une de tes contraintes retourne false, tu bloques jusqu'à ce que ça 
> change, et à ce moment, tu retournes super.take().

Ce serait mieux d'implanter BlockingQueue et de déléguer à une 
LinkedBlockingQueue
les appels car je ne suis pas sur que seul offer/2 et take soit utilisé.
Et même si l'implantation courante n'utilise que c'est deux méthodes, 
rien ne dit que
dans le futur cela ne va pas changer.

>
> -- 
> Cédric

Rémi

>
>
>
>
> 2011/5/25 <[email protected] 
> <mailto:[email protected]>>
>
>     En fait je dois appeler un service web qui ne peut accepter plus
>     de N requêtes par minute.
>
>     Les appels à ce service sont faits via d’autres web services
>     exposés aux clients de mon appli, et dont la fréquence d’appel est
>     limitée par un autre moyen, et forcément à une fréquence
>     différente, sinon ça serait trop simple ;-)
>
>     Donc tant que mes clients ne solliciteront pas mon appli plus de N
>     fois par minute, je veux faire transiter les appels sans délais à
>     l’autre web service (en faisant un paquet de traitements métier au
>     passage dans mon appli).
>
>     Mais dès que la fréquence d’appel de mes clients dépasse N
>     appels/minute alors je ne ralentis pas mes clients mais je mets
>     les appels en attente et je limite la fréquence d’appel du service
>     à N/minute.
>
>     C’est pas difficile à implémenter mais s’il est possible de partir
>     d’une base existante ça limiterait les risques de bugs dans ce
>     composant.
>
>     ScheduledThreadPoolExecutor pourrait en effet faire une bonne base
>     de départ. En calculant le délai appliqué en fonction de la date
>     du dernier appel y’a peut-être moyen de faire ça simplement.
>
>     *De :*David Brassely [mailto:[email protected]
>     <mailto:[email protected]>]
>     *Envoyé :* mercredi 25 mai 2011 11:56
>     *À :* GODARD Patrice NRS
>     *Cc :* * liste Java
>     *Objet :* Re: "throttled" ExecutorService?
>
>     Bonjour,
>
>     Qu'est ce que tu entends par "limiter le rythme" ?
>
>     Sinon, le ScheduledThreadPoolExecutor
>     <http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html>ne
>     répond t'il pas à ton besoin ?
>
>     2011/5/25 <[email protected]
>     <mailto:[email protected]>>
>
>     Bonjour,
>
>     J’ai besoin d’une sorte d’ExecutorService qui puisse limiter le
>     rythme auquel les tâches qui lui sont soumises sont exécutées.
>
>     Il n’y aurait qu’un seul thread dans le pool.
>
>     Est-ce que ce genre de chose existe déjà ?
>
>     Ca m’éviterait de réinventer la roue.
>
>     J’envisage une extension d’ExecutorService ou un truc du genre.
>
>     ********************************************************************************
>
>     IMPORTANT.Les informations contenues dans ce message electronique y compris les fichiers attaches sont strictement confidentielles
>
>     et peuvent etre protegees par la loi.
>
>     Ce message electronique est destine exclusivement au(x) destinataire(s) mentionne(s) ci-dessus.
>
>     Si vous avez recu ce message par erreur ou s il ne vous est pas destine, veuillez immediatement le signaler  a l expediteur et effacer ce message
>
>     et tous les fichiers eventuellement attaches.
>
>     Toute lecture, exploitation ou transmission des informations contenues dans ce message est interdite.
>
>     Tout message electronique est susceptible d alteration.
>
>     A ce titre, le Groupe France Telecom decline toute responsabilite notamment s il a ete altere, deforme ou falsifie.
>
>     De meme, il appartient au destinataire de s assurer de l absence de tout virus.
>
>       
>
>     IMPORTANT.This e-mail message and any attachments are strictly confidential and may be protected by law. This message is
>
>     intended only for the named recipient(s) above.
>
>     If you have received this message in error, or are not the named recipient(s), please immediately notify the sender and delete this e-mail message.
>
>     Any unauthorized view, usage or disclosure ofthis message is prohibited.
>
>     Since e-mail messages may not be reliable, France Telecom Group shall not be liable for any message if modified, changed or falsified.
>
>     Additionally the recipient should ensure they are actually virus free.
>
>     ********************************************************************************
>
>
>
>
>     -- 
>     Brassely David
>     adresse e-mail : [email protected] <mailto:[email protected]>
>
>     ********************************************************************************
>     IMPORTANT.Les informations contenues dans ce message electronique y compris les fichiers attaches sont strictement confidentielles
>     et peuvent etre protegees par la loi.
>     Ce message electronique est destine exclusivement au(x) destinataire(s) mentionne(s) ci-dessus.
>     Si vous avez recu ce message par erreur ou s il ne vous est pas destine, veuillez immediatement le signaler  a l expediteur et effacer ce message
>     et tous les fichiers eventuellement attaches.
>     Toute lecture, exploitation ou transmission des informations contenues dans ce message est interdite.
>     Tout message electronique est susceptible d alteration.
>     A ce titre, le Groupe France Telecom decline toute responsabilite notamment s il a ete altere, deforme ou falsifie.
>     De meme, il appartient au destinataire de s assurer de l absence de tout virus.
>
>     IMPORTANT.This e-mail message and any attachments are strictly confidential and may be protected by law. This message is
>     intended only for the named recipient(s) above.
>     If you have received this message in error, or are not the named recipient(s), please immediately notify the sender and delete this e-mail message.
>     Any unauthorized view, usage or disclosure ofthis message is prohibited.
>     Since e-mail messages may not be reliable, France Telecom Group shall not be liable for any message if modified, changed or falsified.
>     Additionally the recipient should ensure they are actually virus free.
>     ********************************************************************************
>
>