Maison >développement back-end >tutoriel php >Gérer les limites de taux d'API à Laravel par la limitation de l'emploi

Gérer les limites de taux d'API à Laravel par la limitation de l'emploi

James Robert Taylor
James Robert Taylororiginal
2025-03-06 01:44:08331parcourir

Managing API Rate Limits in Laravel Through Job Throttling

La gestion efficace des limites de taux d'API est cruciale lors de l'intégration à des services externes comme AWS SES pour la livraison par e-mail. Laravel propose une solution rationalisée utilisant Redis::throttle pour contrôler le flux de travaux en file d'attente, empêchant les inondations de l'API et les perturbations potentielles de service. Explorons une mise en œuvre pratique.

Tiration de Redis::throttle

Laravel's Redis::throttle fournit un mécanisme robuste pour réguler l'exécution de l'emploi en file d'attente. Cela garantit l'adhésion aux limites de taux d'API, en évitant les blocs de service temporaires ou permanents. La structure de base est la suivante:

Redis::throttle('key-name')
    ->allow(10) // Allow 10 requests
    ->every(5) // Within a 5-second window
    ->then(function () {
        // Your job logic here
    });

Exemple pratique: AWS SES Livraison par e-mail

Créons un système de middleware pour gérer les taux d'envoi d'e-mails avec AWS SES:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Redis;

class EmailRateLimit
{
    public function handle($job, Closure $next)
    {
        Redis::throttle('email-throttle')
            ->allow(10)
            ->every(2)
            ->block(2) // Wait 2 seconds if throttled
            ->then(function () use ($job, $next) {
                $next($job);
            }, function () use ($job) {
                $job->release(30); // Release after 30 seconds
            });
    }
}

Ce middleware sera appliqué à notre système de notification par e-mail:

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
use App\Http\Middleware\EmailRateLimit;

class EmailDispatch extends Notification implements ShouldQueue
{
    use Queueable;

    public $content;

    public function __construct($content)
    {
        $this->content = $content;
    }

    // ... (rest of the Notification class remains the same) ...

    public function middleware(): array
    {
        return [new EmailRateLimit];
    }
}

Enfin, en intégrant cela dans un contrôleur:

<?php

namespace App\Http\Controllers;

use App\Models\User;
use App\Notifications\EmailDispatch;
use Illuminate\Http\Request;

class MailController extends Controller
{
    public function dispatch(Request $request)
    {
        $content = [
            'subject' => 'Important Update',
            'body' => 'Your account has been updated successfully.'
        ];

        $user = User::find($request->user_id);
        $user->notify(new EmailDispatch($content));

        return response()->json(['message' => 'Email queued for delivery']);
    }
}

Cette approche complète garantit que votre application respecte les limites de taux d'API tout en maintenant une livraison de messagerie efficace via AWS SES ou tout fournisseur de services de messagerie compatible. L'utilisation de middleware sépare proprement la logique de limitation de taux de votre code d'application de base.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn