Коли ви працюєте з зовнішніми сервісами, такими як AWS SES для доставки електронної пошти, важливо запобігти перевантаженню API. Laravel пропонує елегантне рішення через Redis::throttle, яке допомагає ефективно управляти вашими лімітами. Давайте розглянемо, як впровадити це для оптимального використання API.
Метод Redis::throttle у Laravel надає потужний спосіб контролювати потік завдань у черзі. Це забезпечує дотримання лімітів API та допомагає уникнути тимчасових або постійних блокувань сервісу.
Redis::throttle('key-name')
->allow(10)
->every(5)
->then(function () {
// Логіка вашої задачі тут
});
Створимо практичний приклад для управління швидкістю надсилання електронних листів з 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')
->block(2)
->allow(10)
->every(2)
->then(
function () use ($job, $next) {
$next($job);
},
function () use ($job) {
$job->release(30);
}
);
}
}
Щоб застосувати це у вашій системі сповіщень:
<?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;
protected $content;
public function __construct($content)
{
$this->content = $content;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject($this->content['subject'])
->line($this->content['body']);
}
public function middleware(): array
{
return [new EmailRateLimit];
}
}
І нарешті, реалізуємо це у вашому контролері:
<?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' => 'Важливе оновлення',
'body' => 'Ваш обліковий запис успішно оновлено.'
];
$user = User::find($request->user_id);
$user->notify(new EmailDispatch($content));
return response()->json(['message' => 'Електронний лист поставлено у чергу для доставки']);
}
}
Ця реалізація гарантує, що ваш додаток дотримується лімітів API, зберігаючи ефективну доставку електронних листів через AWS SES або будь-якого іншого провайдера електронної пошти
```Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом
Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу
Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!