ホームページ > 記事 > PHPフレームワーク > Laravel のキューのメカニズムについて説明し、キューの使用シナリオを理解しましょう。
Laravelキューの使い方は?以下の Laravel チュートリアル コラムでは、Laravel キューの使用方法と、キューを使用するシナリオを紹介します。
まず、なぜキューを使用する必要があるのか、キューを使用すると何が起こるのかを知る必要があります。キューは使わないでください!利点と欠点は何ですか。
簡単なシナリオの例をいくつか挙げます。
#メールの送信
メール送信時に直面する一般的な問題は何ですか ??
クライアントの応答を向上させる
admin@qq.comn
に送信するシナリオに遭遇するでしょう。 このシナリオでは、このシナリオをイベントとして理解できます。電子メール送信のプロセス中に、次のイベントをトリガーして構築できます##送信失敗
それらはLaravelキューを通じて非常にうまく設定できます即時送信、
遅延送信、 送信の再試行送信頻度は制御可能
広告
として識別されるため、ここでは遅延送信 が使用されます。 、現在のキュー サービスで配信を待っている既知のメールに応じて頻度を合理的に設定したり、メールの設定を切り替えて制御可能な頻度を実現したりできます。 1分間に10回送信する設定など。 同様に、ここで 構成、周波数制御、送信制御のデカップリングを実現できます
##その他
#もちろん、それを使用する状況はまだたくさんありますサーバー側での Excel のダウンロード
サーバー側でのビッグ データの非同期マルチタスクエラー メッセージの処理これは、一般的な使用方法とそれをより良く使用する方法のリストです。 。コードはうまく動作しないかもしれません。重要なのはロジックを理解することです ここではドライバーとして Redis を使用しています
ドライバーは Redis に設定されています
> .env QUEUE_CONNECTION=redis > 在 config/queue.php 中可以找到
すぐに作成しますキューと配信タスク
# 创建 任务 php artisan make:job ProcessPodcast
自動生成app/Jobs/EmailJob.phpclass EmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $data;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(array $data)
{
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$service = new EmailService();
// ... 检查当前可用 Mailer
// 这里你自定义就好了,这个方法中你可以根据你自己的配置,获取到当前可用的配置
$mailer = $service->getMailer();
// ... 获取当前要发送的数据
$data = $this->data;
$service->send($mailer, $data);
}
}
# 延迟 2分钟 发送 # 这里使用的是 Crontab 包 (不过 Laravel 自带) EmailJob::dispatch()->delay(now()->addMinutes(2)); # 立即发送 (不会进入到队列中) EmailJob::dispatchNow();
ここのキューはデフォルトでデフォルトのキューを使用しており、次のように変更できます。キュー サービスを指定しますpublic function __construct(array $data) { # 使用 emailQueue $this->onQueue('emailQueue'); $this->data = $data; }失敗した場合の再試行回数を設定します
# 重试 5 次 public $tries = 5;
タイムアウト期間を設定します
/** * 确定任务应该超时的时间 * * @return \DateTime */ public function retryUntil() { return now()->addMinutes(10); }
キューを開始します
onQueue を設定しない場合は、---queue パラメータ設定を使用して#
php artisan queue:work --queue=emailQueue
イベントと結合して分離することができます
Laravel イベントもqueue を介して実装されました
# 创建 Event php artisan make:event FailEvent class FailEvent { use Dispatchable, InteractsWithSockets, SerializesModels; protected $data; protected $tag; /** * @param array $data 投递的数据 * @param string $tag 要操作的事情 */ public function __construct(array $data, string $tag = 'system') { $this->data = $data; $this->tag = $tag; } } # 创建 listener php artisan make:listener FailListener class FailListener { /** * Handle the event. * * @param object $event * @return void */ public function handle(FailEvent $event) { $this->{$event->tag}($event->data); } /** * 处理系统异常 * DateTime: 2021/12/3 11:02 上午 * @param array $data */ public function system(array $data) { } /** * 处理邮件异常 * DateTime: 2021/12/3 11:02 上午 */ public function email() { } } # app/Providers/EventServiceProvider.php protected $listen = [ FailEvent::class => [ FailListener::class, ], ] # 投递 event(new FailEvent(['error' = '异常信息'], 'email'));Others
実際、Laravel はプロセス全体の実装をほぼ支援してくれました。 Redis を使用して、制御可能なキューを自分で実装してみることができます。 Redis 関連のデータ型をマスターするために必要なのは、習熟度だけです。 上記のモードで Redis で使用されるデータ型の簡単なリストを次に示します。
Event
または__construct
を保存するために使用します。データ、クラス全体をシリアル化しないようにしてくださいストレージを実装することもできます。メーラー データSorted Set
時刻を # に設定できます。 ##Sorted Setスコアで並べ替えて、最近実行したいキュー タスクを見つけます
もちろん、独自のニーズを満たすための Redis の使用法は他にもたくさんあります。 。
世界には完璧な解決策はなく、あなたにとって最適な解決策しかありません。仕事で問題に遭遇したときは、1 つの例から推論を導き、さまざまなツールを合理的に使用し、実装するための解決策を設計する方法を学ぶようにしてください。彼ら。 コードは最後の小宇宙にすぎません。最後に理解できるようになることです。各言語と各フレームワークはソリューションの実装にすぎません。それをマスターすることによってのみ無敵になれます...
プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !
以上がLaravel のキューのメカニズムについて説明し、キューの使用シナリオを理解しましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。