ホームページ >PHPフレームワーク >Laravel >Laravelキューのメール送信

Laravelキューのメール送信

藏色散人
藏色散人転載
2019-10-21 13:36:082878ブラウズ

バッチ処理タスク シナリオは、大量の電子メール、メッセージ通知、SMS、フラッシュ セールなどの開発でよく使用されます。この時間のかかる操作を処理のためにキューに入れる必要があるため、Web リクエストが大幅に短縮されます。そして応答時間。

次に、Laravel でのキューの使用について説明します。

設定ファイル 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;,
    ],
];

設定ファイルは、同期ドライバー sync by を使用します。データベース、Beanstalkd、Amazon SQS、Redis など、各キュードライバーの設定はこのファイルにあります。また、キューを中止するタスク用の null キュー ドライバーも含まれています。失敗した構成アイテムは、失敗したキュー タスクが保存されるデータベースとデータ テーブルを構成するために使用されます。

次に、キュー タスク クラスを作成する必要があります。

キュー タスク クラスを作成すると、SendEmail.php ファイルが app/Jobs ディレクトリに生成されます。

php artisan make:job SendEmail
<?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;);
        });
    }
}

タスク クラスが作成されたら、コントローラーに移動してデータを追加しますキューに

メッセージを送信するコントローラーを作成し、ディスパッチ メソッドを使用してタスクを手動で配布します。メソッド

<?php
namespace App\Http\Controllers;
use App\Jobs\SendEmail;
use App\User;
class MessageController extends Controller
{
    public function index()
    {
        $user = User::find(1);
        $this->dispatch(new SendEmail($user));
    }
}

にタスク クラスのインスタンスを渡します。その後、ブラウザにアクセスし、プロジェクトを実行します。そしてタスクをキューにプッシュします。次に、Artisan コマンドを使用してキュー内のタスクを実行します。

php Artisan queue:

# queue:work は、デフォルトでキュー リクエストを 1 回だけ実行し、リクエストが完了すると終了します。 ;

● queue:listen はキューのリクエストをリッスンします。実行中であれば、手動で終了しない限り、常にリクエストを受け入れることができます。

# queue:work --daemon は listen と同じです違いは、作業でフレームワークを再度ロードする必要がないことです。タスクを直接実行します。通常、キューの監視を処理するにはこれを使用することをお勧めします。

# 注: queue:work --daemon を使用する場合、コードを更新するときは、変更されたコードを適用できるように、停止してから再起動する必要があります。

Laravel 関連の技術記事の詳細については、Laravel Framework Getting Started Tutorial 列にアクセスして学習してください。

以上がLaravelキューのメール送信の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。