ホームページ  >  記事  >  PHPフレームワーク  >  Laravelキューの簡単な使用法を説明する例

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

WBOY
WBOY転載
2022-02-25 18:01:452711ブラウズ

この記事では、主に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 サイトの他の関連記事を参照してください。

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