Avec l'augmentation des applications Web, la demande d'envoi d'e-mails augmente également. Dans certains cas, vous devez envoyer des messages par lots ou les envoyer dans une file d'attente pour traitement afin d'améliorer les performances. ThinkPHP 6 fournit des fonctions pratiques d'envoi d'e-mails et de traitement de file d'attente. Cet article explique comment utiliser ThinkPHP 6 pour le traitement de la file d'attente d'e-mails.
1. Installez et configurez le service de file d'attente
1. Installez Redis
Redis est un serveur de stockage de structure de données en mémoire open source utilisé comme base de données, cache et courtier de messages. Étant donné que les données de la file d'attente doivent être conservées, elles doivent être enregistrées via Redis. Pour installer Redis, vous pouvez vous référer à la documentation officielle et à d'autres tutoriels en ligne.
2. Configurez la connexion à la file d'attente
Configurez la connexion à la file d'attente dans le fichier de configuration ThinkPHP config/queue.php L'exemple est le suivant :
return [ // 默认驱动 'default' => env('queue.driver', 'redis'), // 队列连接参数 'connections' => [ 'sync' => [ 'driver' => 'sync', ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => env('queue.redis.queue', 'default'), 'retry_after' => 90, 'block_for' => null, ], ], // 监听的任务类命名空间 'queue_class' => [ // 'AppJobs' ], ];
Parmi eux, le pilote de file d'attente par défaut est configuré comme redis. Les paramètres pertinents du pilote Redis sont configurés dans les connexions, notamment le nom de la connexion, le pilote de connexion, le nom de la file d'attente de connexion, etc. queue_class est utilisé pour surveiller l'espace de noms de la classe qui effectue des tâches.
3. Démarrez l'écouteur de file d'attente
Démarrez l'écouteur de file d'attente dans la ligne de commande et vous pourrez supprimer et exécuter les tâches de la file d'attente une par une. Un exemple est le suivant :
php think queue:listen
2. Utilisez la file d'attente pour envoyer des e-mails
1. Créez une tâche d'envoi d'e-mails
Créez une classe de tâches d'envoi d'e-mails dans le répertoire app/job et écrivez la logique appropriée. Par exemple, la classe de tâches SnedMailJob pour l'envoi d'e-mails :
<?php namespace appjob; use appcommonMail; use thinkqueueJob; class SendMailJob { /** * Send the email message. * * @param Job $job * @param array $data email message data */ public function fire(Job $job, $data) { try { // 发送邮件 Mail::send($data['to'], $data['subject'], $data['content']); // 执行任务成功,删除任务 $job->delete(); } catch (Exception $e) { // 执行任务失败,重新放入任务队列中 // 系统会自动新建一个可重试任务并放入队列,该任务结束后重新尝试执行当前任务 $job->release(); // 或者 $job->failed(); } } }
2. Ajoutez la tâche à la file d'attente
Là où vous devez envoyer l'e-mail, ajoutez la tâche à la file d'attente via le code suivant :
use thinkacadeQueue; // 添加一条SendMailJob任务到队列中 Queue::push(new SendMailJob($to, $subject, $content));
Parmi eux, $ to, $subject, $content sont les destinataires, l'objet et le contenu de l'e-mail.
3. L'écouteur de file d'attente exécute la tâche
Après avoir démarré l'écouteur de file d'attente, la tâche sera automatiquement retirée de la file d'attente et exécutée. Après une exécution réussie, la tâche sera automatiquement supprimée de la file d'attente. Après l'échec de l'exécution, l'écouteur de file d'attente repoussera la tâche dans la file d'attente jusqu'à ce que la tâche soit exécutée avec succès ou que le nombre maximum de tentatives soit atteint (configurable dans le fichier .env).
3. Conclusion
Cet article présente la méthode d'utilisation de ThinkPHP6 pour le traitement de la file d'attente de courrier, y compris l'installation et la configuration du service de file d'attente, la création de tâches d'envoi de courrier, l'ajout de tâches à la file d'attente et les tâches d'exécution de l'écouteur de file d'attente. En utilisant les files d'attente de messagerie, vous pouvez séparer les tâches de messagerie de votre application, améliorant ainsi les performances et la fiabilité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!