[英]Limit Queued Job in Laravel
我有一項 email 服務,該服務允許我每小時(1 次/分鍾)僅發送 60 封電子郵件。 所以這就是為什么我試圖編寫一個尊重服務提供商限制的應用程序,我通過隊列作業立即向批量用戶發送電子郵件,請看一下代碼
public function sendEmails(CreateEmailRequest $request)
{
$data = [];
$users = User::find($request->to);
$subject = $request->subject;
$body = $this->fileUpload($request->body);
foreach ($users as $user) {
$vars = array(
"{{name}}" => $user->name,
"{{email}}" => $user->email,
);
$body = strtr($body, $vars);
$data['body'] = $body;
$data['user'] = $user;
$data['subject'] = $subject;
dispatch(new SendEmailJob($data))->onQueue('mail');
}
Flash::success('Email sent successfully.');
return redirect(route('emails.index'));
}
這是 SendEmailJob Class 代碼
public function handle()
{
$data = $this->data;
$body = $data['body'];
$user = $data['user'];
$subject = $data['subject'];
// list($body, $user, $subject) = $this->data;
Mail::send('mail.email', ['body' => $body], function ($m) use ($user, $subject) {
$m->to($user->email)->subject($subject);
});
}
public function middleware()
{
return Limit::perMinute(1);
}
當我運行 php artisan queue:work 時,它會同時處理所有作業。您能告訴我如何實現嗎? 我不能使用spatie/laravel-rate-limited-job-middleware因為我的服務器不支持 Redis。你能告訴我我做錯了嗎?
您可以使用具有速率限制的作業中間件
在 AppServiceProvider 的引導方法中
RateLimiter::for('emails', function($job) {
return Limit::perMinute(1);
});
並將中間件添加到作業中:
use Illuminate\Queue\Middleware\RateLimited;
public function middleware()
{
return [new RateLimited('emails')];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.