#概要(仕事をTODOリスト(Queue)に入れて、下請け業者(Worker)に投げる)
メール処理は大変重く、同期処理(Sync)で捌くと、Viewの読み込みに多くの時間が必要になる。
同期:アクション読み込み→メールJob→Viweの読み込み→画面の表示
非同:アクション読み込み→メールJobをqueueに保存→Viweの読み込み→画面の表示
→WorkerがバックヤードでメールJobの処理
・テストメールサーバーを用意する。
・メール送信機能を搭載する。
・非同期通信をオンにする。
・Queueを有効にする(データベースを作る)。
・workerをオンにして、Queue内のtaskを処理する。
#テストメール
mailtrapを使用する。
Mybox内のingrationからLaravelを選択する。
以下の記述を丸ごとコピーして、プロジェクト内の.envへ
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=***USERNAME***
MAIL_PASSWORD=***PASSWORD***
MAIL_ENCRYPTION=tls
#.env記述(メーラーも非同期もまとめて記述)
# 非同期処理 記述
QUEUE_CONNECTION=database
# メーラー機能 記述
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=***USERNAME***
MAIL_PASSWORD=***PASSWORD***
MAIL_ENCRYPTION=tls
# 送信元メールアドレス
MAIL_FROM_ADDRESS=sample@sender.com
.envを触った後は、一応キャッシュをクリア
php artisan config:cache
#メーラー設定
php artisan make:mail SampleMail
メール発火機能を入れたい任意のコントローラ
:
:
//クラスの宣言
use Illuminate\Support\Facades\Mail;
use App\Mail\SampleMail;
:
:
//メールを発火させたいアクション内に、以下を記述する。
public function index{
:
:
SendSampleMail::dispatch();
:
:
}
#非同期設定(Queue設定)
//仕掛りJobを保存するための、Queueテーブルを作成する。
php artisan queue:table
php artisan migrate
//仕掛りJobを保存するための機能を作成
php artisan make:job SendSampleMail
:
:
//ジョブのクラスの宣言
use App\Jobs\SendSampleMail;
:
:
:
:
//メーラーのクラスの宣言
use Illuminate\Support\Facades\Mail;
use App\Mail\SampleMail;
:
:
public function handle()
{
// Mail::to('送信先メールアドレス')
//以下のメール送信JobをQueueのテーブルに保存しますという処理
Mail::to('sample@reciever.com')->send(new SampleMail());
}
:
:
#Workerを有効化
以下のコマンドでWorkerを起動させれば、Queueテーブルから、仕掛りJobを実行してくれる。
この時、PHP MyAdminを見れば分かるが、保存されているJobが終わり次第テーブルから削除されているのが分かる。
php artisan queue:work