Všetky výnimky sú v RoundlyConsulting\HttpClientRateLimits\Exceptions a rozširujú RateLimitException:
| Výnimka | Kedy nastane |
|---|---|
RateLimitException | Základná trieda (rozširuje RuntimeException) — zachytíte ňou celú rodinu výnimiek nižšie. |
RateLimitExceededException | Vypočítané čakanie prekročí strop maxWait() (pri zloženom limite najprísnejší zo všetkých okien). Obsahuje key, delayMs a maxWaitMs. |
JobReleasedException | ReleaseDeferrer vrátil úlohu do fronty. Obsahuje delaySeconds, key a job; job middleware HandlesRateLimitRelease pokus čisto ukončí. |
InvalidLimitException | Limit 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. |
UnknownLimiterProfileException | Profil s daným menom nie je definovaný v limiters (alebo jeho položka tam nie je pole). |
InvalidStoreException | Nakonfigurované úložisko neimplementuje kontrakt Store. |
InvalidDeferrerException | Nakonfigurovaný deferrer neimplementuje Deferrer alebo releasingJob() / ReleaseDeferrer dostal úlohu bez metódy release(). |
InvalidTimespanException | Reťazec okna — aj per v profile — nie je second, minute, hour ani day. |
UndefinedMethodException | Metó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 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.