J'ai joué avec un système d'étranglement et je suis tombé sur le Guava RateLimiter. De ce que je peux dire les deux principales façons dont il gère la limitation sont soit en mettant en file d'attente les demandes de recouvrement (les méthodes .acquire (...)) ou en les rejetant (les méthodes tryAcquire (...)Goyave RateLimiter Bursting
J'étais penser qu'il y aurait une option qui autoriserait les demandes jusqu'à la quantité spécifiée et seulement après avoir atteint ladite file d'attente limite ou les demandes d'abandon.
Par exemple:
public static void main(String[] args)
{
try
{
RateLimiter limiter = RateLimiter.create(5.0);
//fictive call not saying it should be implemented this way
limiter.allowBursts(true);
for(int i = 0; i < 20; i++)
{
Thread.sleep(100);
performOperation(limiter);
}
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
private static void performOperation(RateLimiter limiter)
{
if(limiter.tryAcquire())
{
System.out.println(Instant.now() + ": Beep");
}
}
Ce serait alors imprimer cinq bips, omettre les cinq prochaines puis imprimer cinq fois
Suis-je le seul à penser que ce serait une caractéristique très pratique, d'avoir ou Ai-je manqué le point?
courtoisie Code d'essai de: Throttling method calls using Guava RateLimiter class
Je ne veux pas ajouter une file d'attente de taille fixe. Je veux juste qu'il accepte le premier nombre de demandes dans la période de temps Y. Ensuite, omettez ou mettez en file d'attente les prochains messages entrants (selon la fonctionnalité déjà existante). Une fois l'intervalle coché, acceptez à nouveau X et répétez. Espérons que cela a du sens? – Rhed