Apl saya dihoskan pada platform pengehosan kongsi yang mempunyai had 200 e-mel sejam.
Permohonan saya sedang berjalan Pemacu Sambungan Pangkalan Data dan saya mempunyai 3000 pekerjaan dalam jadual kerja.
Saya ingin mengehadkan baris gilir ini untuk hanya menghantar 1 e-mel setiap 30 saat atau 1 minit untuk memastikan tiada masalah dengan pengehosan saya.
Penyelidikan: Saya mencuba kelewatan tutorial ini, kadar soalan ini mengehadkan tetapi tiada jawapan, tugas kelewatan dokumentasi laravel ini, tetapi tiada apa yang berjaya.
Soalan: Adakah terdapat cara untuk mengehadkan baris gilir dalam sambungan baris gilir pangkalan data seperti dalam sambungan gilir redis, iaitu
// Allow only 1 email every 30 seconds Redis::throttle('any_key')->allow(1)->every(30)->then(function () { Mail::to($this->email)->send(new NotificationEmail($this->data) ); Log::info('Emailed order ' . $this->email); }, function () { // Could not obtain lock; this job will be re-queued return $this->release(2); });
Pelaksanaan saya: Tangguhkan kerja pertama sahaja dan hantar kerja lain dengan segera
public function sendEmailNotification($email,$data) { //Send email to user and to admin $email_job = (new ProcessEmailNotificationJob($email,$data))->delay(now()->addSeconds(30)); if($this->dispatch($email_job)){ return true; } else{ return false; } }
**Fail ENV:**
BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=database SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1
Sudahkah anda menjalankan php artisanqueue:listen Jika ya, sila semak kod saya di bawah mungkin ia akan membantu
Dalam pengawal:
Kelas SendMailJob