Rozptyl čakania (jitter)
Pridajte k čakaniu náhodný jitter, aby sa množstvo workerov neprebudilo v tom istom okamihu:
Http::rateLimit(RateLimits::perMinute(30)->jitter(50)) // waits 0–50ms longer than needed
->get('https://api.example.com/orders');Jitter sa uplatní len vtedy, keď požiadavka naozaj musí čakať, a čakanie vždy len predĺži: k skutočnému oneskoreniu pripočíta náhodných 0 až jitter milisekúnd, takže požiadavka nikdy neodíde skôr, než má okno voľné miesto. Pri zloženom limite platí najširší jitter zo všetkých okien. V pomenovanom profile použite kľúč jitter (v milisekundách).
Deterministické testy
Zdrojom náhodnosti je vymeniteľný kontrakt Randomizer (predvolený RandomRandomizer používa random_int). Pre deterministické testy ho vymeňte na Limiteri:
use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;
use RoundlyConsulting\HttpClientRateLimits\Jitter\Randomizer;
$limit = RateLimits::perSecond(1)->jitter(50);
// Always add the full +50ms so waits are deterministic in a test.
$limit->getLimiter()->setRandomizer(new class implements Randomizer {
public function between(int $min, int $max): int
{
return $max;
}
});Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.