NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Všetky výnimky sú v RoundlyConsulting\HttpClientRateLimits\Exceptions a rozširujú RateLimitException:

VýnimkaKedy nastane
RateLimitExceptionZákladná trieda (rozširuje RuntimeException) — zachytíte ňou celú rodinu výnimiek nižšie.
RateLimitExceededExceptionVypočítané čakanie prekročí strop maxWait() (pri zloženom limite najprísnejší zo všetkých okien). Obsahuje key, delayMs a maxWaitMs.
JobReleasedExceptionReleaseDeferrer vrátil úlohu do fronty. Obsahuje delaySeconds, key a job; job middleware HandlesRateLimitRelease pokus čisto ukončí.
InvalidLimitExceptionLimit povoľuje menej ako jednu požiadavku za okno (rate alebo maxAttempts pod 1) alebo Http::rateLimit() dostane prázdne pole či položku poľa, ktorá nie je Limit, RateLimit, meno profilu ani celé číslo.
UnknownLimiterProfileExceptionProfil s daným menom nie je definovaný v limiters (alebo jeho položka tam nie je pole).
InvalidStoreExceptionNakonfigurované úložisko neimplementuje kontrakt Store.
InvalidDeferrerExceptionNakonfigurovaný deferrer neimplementuje Deferrer alebo releasingJob() / ReleaseDeferrer dostal úlohu bez metódy release().
InvalidTimespanExceptionReťazec okna — aj per v profile — nie je second, minute, hour ani day.
UndefinedMethodExceptionMetóda volaná na RateLimit neexistuje ani na Limit, ani na Limiter.

Zachytenie všetkých

use RoundlyConsulting\HttpClientRateLimits\Exceptions\RateLimitException;

try {
    Http::rateLimit('github')->get('https://api.github.com/user');
} catch (RateLimitException $e) {
    // Any package error: unknown profile, max wait exceeded, invalid store/deferrer, …
    report($e);
}

V úlohe vo fronte s ReleaseDeferrer zachytí všeobecný catch aj JobReleasedException — a úloha je už späť vo fronte, takže pokus pokračuje, akoby požiadavka prebehla, a vrátená kópia sa neskôr spustí znova. Zachytávajte užšie alebo vrátenie najprv vyhoďte ďalej a pokus nechajte ukončiť HandlesRateLimitRelease:

use RoundlyConsulting\HttpClientRateLimits\Exceptions\JobReleasedException;
use RoundlyConsulting\HttpClientRateLimits\Exceptions\RateLimitException;

try {
    Http::withMiddleware(RateLimits::releasingJob($this)->perMinute(60)->by('github'))->get($url);
} catch (JobReleasedException $released) {
    throw $released; // HandlesRateLimitRelease ends the attempt
} catch (RateLimitException $e) {
    // a real limit or setup failure
}

Niektoré chyby z tých istých volaní nie sú RateLimitException: InvalidConfigurationException z package-toolkit pri chybnej hodnote konfigurácie (pozrite Konfigurácia), LockTimeoutException od Laravelu, keď CacheStore nezíska zámok okna včas, RequestException vyhodená ďalej z callbacku pre handle(), ktorý volá ->throw(), a vlastné chyby backendu úložiska (chyby pripojenia k Redisu, databázové QueryException), ktoré sa šíria ďalej nezmenené.

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 kryptomien

Odoslaní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.