Heim > Backend-Entwicklung > PHP-Tutorial > Verwalten von API -Ratenlimits in Laravel durch Job -Drosselung

Verwalten von API -Ratenlimits in Laravel durch Job -Drosselung

James Robert Taylor
Freigeben: 2025-03-06 01:44:08
Original
325 Leute haben es durchsucht

Managing API Rate Limits in Laravel Through Job Throttling

effizientes Verwalten von API -Ratengrenzen ist entscheidend für die Integration in externe Dienste wie AWS SES für die E -Mail -Zustellung. Laravel bietet eine optimierte Lösung unter Verwendung von Redis::throttle, um den Fluss von Arbeitsplätzen in der Warteschlange zu steuern und API -Überschwemmungen und potenzielle Servicestörungen zu verhindern. Lassen Sie uns eine praktische Implementierung untersuchen.

Nutzung Redis::throttle

Laravels Redis::throttle bietet einen robusten Mechanismus für die Regulierung der Arbeitsplatzausführung in die Warteschlange. Dies gewährleistet die Einhaltung von API -Ratengrenzen und vermeidet vorübergehende oder dauerhafte Serviceblöcke. Die Grundstruktur lautet wie folgt:

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

Praktisches Beispiel: AWS SES -E -Mail -Zustellung

Erstellen wir ein Middleware -System zum Verwalten von E -Mails mit 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
            });
    }
}
Nach dem Login kopieren

Diese Middleware wird auf unser E -Mail -Benachrichtigungssystem angewendet:

<?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];
    }
}
Nach dem Login kopieren

schließlich in einen Controller integrieren:

<?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']);
    }
}
Nach dem Login kopieren

Dieser umfassende Ansatz stellt sicher, dass Ihre Bewerbung die API -Ratenlimits respektiert und gleichzeitig die effiziente E -Mail -Zustellung über AWS -SES oder einen kompatiblen E -Mail -Service -Anbieter beibehält. Die Verwendung von Middleware trennt die preislimitierende Logik sauber von Ihrem Kernanwendungscode.

Das obige ist der detaillierte Inhalt vonVerwalten von API -Ratenlimits in Laravel durch Job -Drosselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage