目次
キューをいつ使用するか?
1. キュー ストレージを設定します
2. タスク クラスの作成
3. キューの開始タスク
4. スーパーバイザーの設定
ホームページ PHPフレームワーク Laravel Laravelキューの簡単な使用法を説明する例

Laravelキューの簡単な使用法を説明する例

Feb 25, 2022 pm 06:01 PM
laravel

この記事では、主にLaravelキュー、どのような状況でキューを使用するか、キューストレージの設定などを紹介するlaravel関連知識を皆様にお届けしますので、皆様のお役に立てれば幸いです。

Laravelキューの簡単な使用法を説明する例

[関連する推奨事項: laravel 学習チュートリアル ]

この記事では、Laravel でキューを使用する方法と、その理由を理解する方法を紹介します。キュー

キューをいつ使用するか?

ファイルをアップロードしてからいくつかの形式変換を実行するなど、時間がかかります。

テキスト メッセージの送信など、配信速度を確保する必要がある場合、他人の API を呼び出す必要があるため、常に失敗する可能性があり、確実に配信するにはリトライが不可欠です。

使用プロセスを記録します:

1. キュー ストレージを設定します

キュー設定ファイルは config/queue.php に保存されます。デフォルトは sync 同期処理です。 redis、データベース等が選択可能です。利用方法は以下の通りです。

データベース

データ テーブル ストレージ タスクを作成し、artisan コマンドの実行後にデータ移行を実行します

php artisan queue:table
php artisan migrate
ログイン後にコピー

Redis

Redis キュー ドライバーを使用するには、構成ファイル config/database.php で Redis データベース接続を構成する必要があります。

Redis キュー接続で Redis クラスターを使用する場合、キュー名にはキー ハッシュ タグが含まれている必要があります。これは、特定のキューのすべての Redis キーが同じハッシュに配置されるようにするためです:

'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],
ログイン後にコピー

2. タスク クラスの作成

キューのタスク クラスは app/Jobs にあります/ ディレクトリ Next

php 職人 make:job SaveBusLine

ファイルを次のように変更します:

namespace App\Jobs;
use App\Http\Repository\BusRepository;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SaveBusLine implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* 任务最大尝试次数。
*
* @var int
*/
public $tries = 3;
/**
* 任务运行的超时时间。
*
* @var int
*/
public $timeout = 60;
private $datum;
/**
* Create a new job instance.
* @param array|object $datum
*
* @return void
*/
public function __construct($datum)
{
$this->datum = $datum;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
BusRepository::getInstent()->updateBusLine($this->datum);
}
}
ログイン後にコピー

コントローラーまたはウェアハウスでキュー メソッドを呼び出します:

use App\Jobs\SaveBusLine;
use Carbon\Carbon;
/***************** 队列操作 start *******************/
SaveBusLine::dispatch($arrayData)->delay(Carbon::now()->addMinute(1));
/***************** 队列操作 end *******************/
ログイン後にコピー

3. キューの開始タスク

phpArtisan queue:work

4. スーパーバイザーの設定

スーパーバイザーのインストール

スーパーバイザーはLinux オペレーティング システム queue:listen または queue:work コマンドが失敗した後に自動的に再起動するプロセス監視ソフトウェア。 Ubuntu に Supervisor をインストールするには、次のコマンドを使用できます:

sudo apt-get install supervisor
ログイン後にコピー

{tip} Supervisor を手動で構成するのが少し面倒に思える場合は、Laravel プロジェクト用に Supervisor を自動的にインストールして構成できる Laravel Forge の使用を検討してください。 。

#スーパーバイザーの設定

スーパーバイザー設定ファイルは通常、/etc/supervisor/conf.d ディレクトリに配置されます。このディレクトリには、プロセスを監視する方法をスーパーバイザに指示するための構成ファイルをいくつでも作成できます。たとえば、queue:work プロセスを開始および監視するための laravel-worker.conf を作成します。

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php ~/laravel/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=lisgroup
numprocs=8
redirect_stderr=true
stdout_logfile=/home/lisgroup/logs/worker.log
ログイン後にコピー

この例の numprocs コマンドは、Supervisor に 8 つの queue:work プロセスを実行および監視するように要求します。実行に失敗してから再起動します。もちろん、選択したキュー ドライバーを表示するには、queue:work redis コマンドを変更する必要があります。また、実行ユーザー user=XXX

Start Supervisor

この構成ファイルを作成した後、Supervisor 構成を更新し、次のコマンドを使用する必要があります。スーパーバイザー プロセスを開始するには:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
ログイン後にコピー

スーパーバイザーの設定と使用方法の詳細については、スーパーバイザーの公式ドキュメントを参照してください。

5. 失敗したタスクの処理

キュー内のタスクが失敗することがあります。心配しないでください。物事が常に順風満帆に進むとは限りません。 Laravel には、タスクの最大再試行回数を指定する便利な方法が組み込まれています。タスクがこの再試行回数を超えると、そのタスクは failed_jobs データ テーブルに挿入されます。 failed_jobs テーブルの移行ファイルを作成するには、queue:failed-table コマンドを使用してから、 mitigArtisan コマンドを使用して failed_jobs テーブルを生成します。

php artisan queue:failed-table
php artisan migrate
ログイン後にコピー

その後、キュー プロセッサを実行し、キュー ワーカーの場合は、コマンドを渡す必要があります。 --tries パラメーターは、タスクの最大再試行回数を指定します。指定しない場合、タスクは永続的に再試行されます:

php artisan queue:work redis --tries=3
ログイン後にコピー

6. 失敗したタスクのクリア

タスク クラスで失敗したメソッドを直接定義でき、タスクの終了時にタスクのクリーンアップを実行できます。ロジックが失敗します。この場所は、ユーザーに警告を送信したり、タスク実行の操作をリセットしたりするのに最適です。タスクを失敗させる例外情報は、失敗したメソッドに渡されます:

namespace App\Jobs;
use Exception;
use App\Podcast;
use App\AudioProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class ProcessPodcast implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
protected $podcast;
/**
* 创建一个新的任务实例。
*
* @param Podcast $podcast
* @return void
*/
public function __construct(Podcast $podcast)
{
$this->podcast = $podcast;
}
/**
* 执行任务。
*
* @param AudioProcessor $processor
* @return void
*/
public function handle(AudioProcessor $processor)
{
// 处理上传播客...
}
/**
* 要处理的失败任务。
*
* @param Exception $exception
* @return void
*/
public function failed(Exception $exception)
{
// 给用户发送失败通知,等等...
}
}
ログイン後にコピー
[関連する推奨事項:

laravel ビデオ チュートリアル ]

以上がLaravelキューの簡単な使用法を説明する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Apr 01, 2025 pm 02:45 PM

Laravelの電子メールの送信が失敗したときに戻りコードを取得する方法。 Laravelを使用してアプリケーションを開発する場合、検証コードを送信する必要がある状況に遭遇することがよくあります。そして実際には...

Laravelスケジュールタスクは実行されません:スケジュール:実行コマンドの後にタスクが実行されていない場合はどうすればよいですか? Laravelスケジュールタスクは実行されません:スケジュール:実行コマンドの後にタスクが実行されていない場合はどうすればよいですか? Mar 31, 2025 pm 11:24 PM

LaravelスケジュールタスクRAN RANSPONSIVEトラブルシューティングRALAVELのスケジュールタスクスケジューリングを使用すると、多くの開発者がこの問題に遭遇します。スケジュール:実行...

Laravelでは、検証コードが電子メールで送信できない状況に対処する方法は? Laravelでは、検証コードが電子メールで送信できない状況に対処する方法は? Mar 31, 2025 pm 11:48 PM

Laravelの電子メールの検証コードの送信の障害を処理する方法は、Laravelを使用することです...

DCAT管理者にデータを追加するためにクリックのカスタムテーブル関数を実装する方法は? DCAT管理者にデータを追加するためにクリックのカスタムテーブル関数を実装する方法は? Apr 01, 2025 am 07:09 AM

DCATを使用するときにDCATADMIN(Laravel-Admin)にデータを追加するためにカスタムクリックのテーブル関数を実装する方法...

Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Apr 01, 2025 am 07:45 AM

Laravel FrameworkでRedis接続の共有の影響とLaravelフレームワークとRedisを使用する際のメソッドを選択すると、開発者は問題に遭遇する可能性があります。

Laravel Multi-Tenant Extension Stancl/Tenancy:テナントデータベース接続のホストアドレスをカスタマイズする方法は? Laravel Multi-Tenant Extension Stancl/Tenancy:テナントデータベース接続のホストアドレスをカスタマイズする方法は? Apr 01, 2025 am 09:09 AM

Laravel Multi-Tenant拡張機能パッケージStancl/Tenancyのカスタムテナントデータベース接続Laravel Multi-Tenant ExtensionパッケージStancl/Tenancyを使用したマルチテナントアプリケーションを構築する際の...

バングラ部分モデル検索のlaravelEloquent orm) バングラ部分モデル検索のlaravelEloquent orm) Apr 08, 2025 pm 02:06 PM

LaravelEloquentモデルの検索:データベースデータを簡単に取得するEloquentormは、データベースを操作するための簡潔で理解しやすい方法を提供します。この記事では、さまざまな雄弁なモデル検索手法を詳細に紹介して、データベースからのデータを効率的に取得するのに役立ちます。 1.すべてのレコードを取得します。 ALL()メソッドを使用して、データベーステーブルですべてのレコードを取得します:useapp \ models \ post; $ post = post :: all();これにより、コレクションが返されます。 Foreach Loopまたはその他の収集方法を使用してデータにアクセスできます。

Laravelデータベースの移行の遭遇重複クラス定義:複製の移行ファイルとクラス名の競合を複製する方法は? Laravelデータベースの移行の遭遇重複クラス定義:複製の移行ファイルとクラス名の競合を複製する方法は? Apr 01, 2025 pm 12:21 PM

Laravelデータベースの移行中にクラス定義を複製する問題が発生します。データベースの移行にLaravelフレームワークを使用する場合、開発者は「クラスが使用されています...

See all articles