Mon application est hébergée sur une plateforme d'hébergement mutualisé qui a une limite de 200 emails par heure.
Mon application exécute Database Connection Driver et j'ai 3000 emplois dans la table des emplois.
Je souhaite limiter cette file d'attente à l'envoi d'un seul e-mail toutes les 30 secondes ou 1 minute pour m'assurer qu'il n'y a aucun problème avec mon hébergement.
Recherche : J'ai essayé le retard de ce tutoriel, la limitation de débit de cette question mais pas de réponse, le travail de retard de cette documentation Laravel, mais rien n'a fonctionné.
Question : Existe-t-il un moyen de limiter la file d'attente dans la connexion à la file d'attente de base de données comme dans la connexion à la file d'attente redis, c'est-à-dire
// 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); });
Mon implémentation : Retarder uniquement le premier travail et envoyer les autres travaux immédiatement
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; } }
**Fichier ENV :**
BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=database SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1
Avez-vous exécuté php artisanqueue:listen Si oui, veuillez vérifier mon code ci-dessous, peut-être que cela vous aidera
?Au sein du contrôleur :
Classe SendMailJob