Maison  >  Article  >  cadre php  >  File d'attente Laravel Envoi de courrier

File d'attente Laravel Envoi de courrier

藏色散人
藏色散人avant
2019-10-21 13:36:082841parcourir

Des scénarios de tâches de traitement par lots sont souvent utilisés dans notre développement, tels que des e-mails de masse, des notifications de messages, des SMS, des ventes flash, etc. Nous devons mettre cette opération chronophage dans la file d'attente de traitement, raccourcissant ainsi considérablement la requête Web. et le temps de réponse.

Ce qui suit explique l'utilisation des files d'attente dans Laravel

Le fichier de configuration config/queue.php

<?php
return [
    &#39;default&#39; => env(&#39;QUEUE_DRIVER&#39;, &#39;sync&#39;),
    &#39;connections&#39; => [
        &#39;sync&#39; => [
            &#39;driver&#39; => &#39;sync&#39;,
        ],
        &#39;database&#39; => [
            &#39;driver&#39; => &#39;database&#39;,
            &#39;table&#39; => &#39;jobs&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
        &#39;beanstalkd&#39; => [
            &#39;driver&#39; => &#39;beanstalkd&#39;,
            &#39;host&#39; => &#39;localhost&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
        &#39;sqs&#39; => [
            &#39;driver&#39; => &#39;sqs&#39;,
            &#39;key&#39; => &#39;your-public-key&#39;,
            &#39;secret&#39; => &#39;your-secret-key&#39;,
            &#39;prefix&#39; => &#39;https://sqs.us-east-1.amazonaws.com/your-account-id&#39;,
            &#39;queue&#39; => &#39;your-queue-name&#39;,
            &#39;region&#39; => &#39;us-east-1&#39;,
        ],
        &#39;redis&#39; => [
            &#39;driver&#39; => &#39;redis&#39;,
            &#39;connection&#39; => &#39;default&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
    ],
    &#39;failed&#39; => [
        &#39;database&#39; => env(&#39;DB_CONNECTION&#39;, &#39;mysql&#39;),
        &#39;table&#39; => &#39;failed_jobs&#39;,
    ],
];

Le fichier de configuration utilise le pilote de synchronisation sync par défaut. La configuration de chaque pilote de file d'attente se trouve dans ce fichier, y compris la base de données, Beanstalkd, Amazon SQS et Redis. Il comprend également un pilote de file d'attente nul pour les tâches qui abandonnent la file d'attente. L'élément de configuration ayant échoué est utilisé pour configurer la base de données et la table de données dans lesquelles les tâches de file d'attente ayant échoué sont stockées.

Ensuite, nous devons créer une classe de tâches de file d'attente.

Créez une classe de tâches de file d'attente, puis un fichier SendEmail.php sera généré dans le répertoire app/Jobs

php artisan make:job SendEmail
rrree

Une fois la classe de tâches créée, accédez au contrôleur et ajoutez les données à la file d'attente

Créez un contrôleur qui envoie des messages et utilisez la méthode de répartition pour distribuer manuellement les tâches. Passez une instance de la classe de tâches

<?php
namespace App\Jobs;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $user;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
    /**
     * 执行队列的方法 比如发送邮件
     *
     * @return void
     */
    public function handle()
    {
      $user = $this->user;
      
      Mail::raw(&#39;这里填写邮件的内容&#39;,function ($message){
             // 发件人(你自己的邮箱和名称)
            $message->from(&#39;your_email@163.com&#39;, &#39;yourname&#39;);
            // 收件人的邮箱地址
            $message->to($this->user);
            // 邮件主题
            $message->subject(&#39;队列发送邮件&#39;);
        });
    }
}

dans la méthode, puis accédez au navigateur, exécutez le. projet et placez la tâche dans la file d'attente. Utilisez ensuite la commande Artisan pour exécuter les tâches dans la file d'attente

php artisan queue:

Quantity queue:work par défaut n'exécute la requête de file d'attente qu'une seule fois et se termine lorsque la requête est terminée ; 🎜>

● queue:listen surveille les requêtes en file d'attente Tant qu'il est en cours d'exécution, il peut toujours accepter les requêtes à moins qu'il ne soit terminé manuellement

● queue:work --daemon est identique à Listen, sauf que ; work n'a pas besoin de charger à nouveau le framework. Exécutez la tâche directement. Il est généralement recommandé de l'utiliser pour gérer la surveillance des files d'attente.

● Remarque : utilisez queue:work --daemon Lors de la mise à jour du code, vous devez arrêter puis redémarrer pour que le code modifié puisse être appliqué.

Pour plus d'articles techniques liés à Laravel, veuillez visiter la colonne

Tutoriel d'introduction au framework Laravel pour apprendre !

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer