Heim >PHP-Framework >Laravel >Laravel-Warteschlange beim Senden von E-Mails

Laravel-Warteschlange beim Senden von E-Mails

藏色散人
藏色散人nach vorne
2019-10-21 13:36:082876Durchsuche

In unserer Entwicklung werden häufig Stapelverarbeitungsaufgabenszenarien verwendet, z. B. Massen-E-Mails, Nachrichtenbenachrichtigungen, SMS, Flash-Verkäufe usw. Wir müssen diesen zeitaufwändigen Vorgang zur Verarbeitung in die Warteschlange stellen, wodurch die Webanfrage erheblich verkürzt wird und Reaktionszeit.

Im Folgenden wird die Verwendung von Warteschlangen in Laravel erläutert

Die Konfigurationsdatei 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;,
    ],
];

Die Konfigurationsdatei verwendet den Synchronisierungstreiber sync Standardmäßig finden Sie in dieser Datei die Konfiguration für jeden Warteschlangentreiber, einschließlich Datenbank, Beanstalkd, Amazon SQS und Redis. Es enthält außerdem einen Null-Warteschlangentreiber für Aufgaben, die die Warteschlange abbrechen. Das fehlgeschlagene Konfigurationselement wird zum Konfigurieren der Datenbank und der Datentabelle verwendet, in der fehlgeschlagene Warteschlangenaufgaben gespeichert werden.

Als nächstes müssen wir eine Warteschlangenaufgabenklasse erstellen.

Erstellen Sie eine Warteschlangen-Aufgabenklasse, und dann wird eine SendEmail.php-Datei im Verzeichnis app/Jobs generiert

php artisan make:job SendEmail
rrree

Nachdem die Aufgabenklasse erstellt wurde, gehen Sie zum Controller und fügen Sie die Daten hinzu zur Warteschlange

Erstellen Sie einen Controller, der Nachrichten sendet und verwenden Sie die Dispatch-Methode, um Aufgaben manuell zu verteilen. Übergeben Sie eine Instanz der Task-Klasse

<?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;);
        });
    }
}

in der Methode, greifen Sie dann auf den Browser zu und führen Sie die aus Projekt und verschieben Sie die Aufgabe in die Warteschlange. Verwenden Sie dann den Artisan-Befehl, um die Aufgaben in der Warteschlange auszuführen

php artisan queue:

● queue:work führt die Warteschlangenanforderung standardmäßig nur einmal aus und wird beendet, wenn die Anforderung abgeschlossen ist

● queue:listen überwacht Warteschlangenanfragen und kann Anfragen immer annehmen, sofern sie nicht manuell beendet werden.

● queue:work --daemon ist dasselbe wie listen Die Arbeit muss das Framework nicht erneut laden. Es wird allgemein empfohlen, dies für die Warteschlangenüberwachung zu verwenden.

● Hinweis: Verwenden Sie queue:work --daemon. Wenn Sie den Code aktualisieren, müssen Sie ihn anhalten und dann neu starten, damit der geänderte Code angewendet werden kann.

Weitere technische Artikel zu Laravel finden Sie in der Spalte Einführungs-Tutorial zum Laravel-Framework, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonLaravel-Warteschlange beim Senden von E-Mails. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen