Laravelキューの使用
4843 ワード
1環境
LaravelはThinkPHPのようなphpフレームワークで、パッケージされた多くの機能が便利に使用できます.キューQueueはその1つです.Windows環境では、Laravelの統合開発環境IDEとしてPHPstormを使用できます.
2キュー
Laravelは、sync、database、beanstalkd、sqs、redis、null(app/config/queue.phpを参照)など、さまざまなキュードライバを構成できます.syncは同期であり、databaseはデータベースを使用し、次の3つはサードパーティのキュー・サービスであり、最後の1つはキューを使用しません.通過するEnvのQUEUE_CONNECTIONオプションで、どのドライブを選択するかを決定します.QUEUE_CONNECTION=databaseは、データベースドライバキューを選択します.
3原理
キューとは、データの生産者と消費者の区別があります.生産者はキューにデータを配達し,消費者はキューからデータを取得する.例えば、ユーザーにメールを送信するシーン:今10 wのメールを送信する必要があります.最も簡単なのは、メールの受信者、内容などを10 wのタスクに分割してキューに置く方法と、各タスクを処理するコールバック方法を設定する必要があります.キューにメール送信タスクがある場合、キューはコールバックメソッドをアクティブに呼び出し、タスクの詳細を渡します.コールバックメソッドの処理が完了すると、単一のメールが送信されます.その他のメールは見本どおりに処理します.
4データベース駆動キューの使用
4.1製造オーダー表の生成
端末での入力
データベース接続が正常な場合、jobsテーブルがデータベースに表示されます.
4.2タスククラスの作成
端末内で上記コマンドを実行すると、app/Jobs/SendMailが自動的に生成する.phpファイル
このファイルのhandleメソッドでは、タスク処理ロジックを配置できます.
4.3タスクの送信
任意の場所でdispatch送信タスクを次のように呼び出すことができます.
4.4駆動キュー
上記の手順を完了すると、データベースにレコード(insert SQL文としてエクスポート)が見つかります.
タスクはデータベース内に配置され、キューを実行してから、キューがコールバックメソッドをアクティブに呼び出すことができます.
端末内で上記コマンドを実行すればよい.このコマンドにはdeamon、triesなど多くのパラメータがあり、必要に応じて指定できます.
4.5デーモンプロセス
アプリケーション・サービスの安定性を確保するためには、デーモン・プロセスを開始する必要があります.LinuxではSupervisor、WindowsではForeverが一般的ですが、ここを参考にしてください.
4.6失敗した処理の実行
失敗したタスクを処理する場合、Laravelも提供するソリューションです.次のコマンドを実行すると、失敗したタスクを記録するテーブルを作成できます.
データベースでfailed_を生成jobs :
タスクに失敗したExceptionは、SendMailのfailedメソッドに渡されるため、SendMailで独自にメソッドを実装し、さらに処理する必要があります.タスクの実行に失敗した原因は、パラメータエラー、試行回数が制限を超えた、タイムアウト、handleメソッドで例外が投げ出されたなど、多くの場合、失敗したタスクとして処理されます.
4.7タスク実行前後の処理
Laravelは、App/Providers/AppServiceProviderのboot()に次のコードを追加するタスク実行前後の処理エントリを提供します.
渡された$eventには、タスクの詳細、いくつかの簡単な例があります.
5 Redisドライバキューの使用
5.1 LaravelインストールPredisパッケージ
LaravelでRedisを使用する前に、Composerでpredis/predisパッケージをインストールする必要があります.
上記の拡張はLaravelがRedisと付き合うのを助けるもので、私たちはまだRedisサービスが不足しています.この時点で.EnvのQUEUE_CONNECTIONはredisに変更され、アクセス時にエラーが表示されます.
5.2 Redisサービスの構成
Redis公式サイトでソースコードをダウンロードしてから、自分でコンパイルすればいいです.公式にはWindows版は提供されていません.RedisのWindows版はマイクロソフトのワークグループによって維持されています.GitHubページから見つけることができます.しかし、メンテナンスは行われていないようで、最新バージョンは16年にリリースされた3.2.100です.Linuxでは簡単な運転で
サービスを開始し、
を使用してRedisを試します.使用も簡単です.set key valueとget keyです.Windowsでインストール後、コマンドラインでインストールディレクトリにcd
Redisサービスを開始できます.Redisサービスの停止は、次のコマンドによって行われます.
LaravelはThinkPHPのようなphpフレームワークで、パッケージされた多くの機能が便利に使用できます.キューQueueはその1つです.Windows環境では、Laravelの統合開発環境IDEとしてPHPstormを使用できます.
2キュー
Laravelは、sync、database、beanstalkd、sqs、redis、null(app/config/queue.phpを参照)など、さまざまなキュードライバを構成できます.syncは同期であり、databaseはデータベースを使用し、次の3つはサードパーティのキュー・サービスであり、最後の1つはキューを使用しません.通過するEnvのQUEUE_CONNECTIONオプションで、どのドライブを選択するかを決定します.QUEUE_CONNECTION=databaseは、データベースドライバキューを選択します.
3原理
キューとは、データの生産者と消費者の区別があります.生産者はキューにデータを配達し,消費者はキューからデータを取得する.例えば、ユーザーにメールを送信するシーン:今10 wのメールを送信する必要があります.最も簡単なのは、メールの受信者、内容などを10 wのタスクに分割してキューに置く方法と、各タスクを処理するコールバック方法を設定する必要があります.キューにメール送信タスクがある場合、キューはコールバックメソッドをアクティブに呼び出し、タスクの詳細を渡します.コールバックメソッドの処理が完了すると、単一のメールが送信されます.その他のメールは見本どおりに処理します.
4データベース駆動キューの使用
4.1製造オーダー表の生成
端末での入力
php artisan queue:table
php artisan migrate
データベース接続が正常な場合、jobsテーブルがデータベースに表示されます.
[id] bigint
[queue] nvarchar(255)
[payload] nvarchar(max)
[attempts] tinyint
[reserved_at] int
[available_at] int
[created_at] int
4.2タスククラスの作成
php artisan make:job SendEmail
端末内で上記コマンドを実行すると、app/Jobs/SendMailが自動的に生成する.phpファイル
class SendMail implements ShouldQueue
このファイルのhandleメソッドでは、タスク処理ロジックを配置できます.
4.3タスクの送信
任意の場所でdispatch送信タスクを次のように呼び出すことができます.
SendMail::dispatch($email);
4.4駆動キュー
上記の手順を完了すると、データベースにレコード(insert SQL文としてエクスポート)が見つかります.
INSERT INTO [jobs]([id], [queue], [payload], [attempts], [reserved_at], [available_at], [created_at]) VALUES (6, N'default', N'{"displayName":"App\\Jobs\\ProcessPodcast","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\\Jobs\\ProcessPodcast","command":"O:23:\"App\\Jobs\\ProcessPodcast\":8:{s:29:\"\u0000App\\Jobs\\ProcessPodcast\u0000data\";s:6:\"111222\";s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";N;s:7:\"chained\";a:0:{}}"}}', 0, NULL, 1545980176, 1545980176);
タスクはデータベース内に配置され、キューを実行してから、キューがコールバックメソッドをアクティブに呼び出すことができます.
php artisan queue:work
端末内で上記コマンドを実行すればよい.このコマンドにはdeamon、triesなど多くのパラメータがあり、必要に応じて指定できます.
4.5デーモンプロセス
アプリケーション・サービスの安定性を確保するためには、デーモン・プロセスを開始する必要があります.LinuxではSupervisor、WindowsではForeverが一般的ですが、ここを参考にしてください.
4.6失敗した処理の実行
失敗したタスクを処理する場合、Laravelも提供するソリューションです.次のコマンドを実行すると、失敗したタスクを記録するテーブルを作成できます.
php artisan queue:failed-table
php artisan migrate
データベースでfailed_を生成jobs :
[id] bigint
[connection] nvarchar(max)
[queue] nvarchar(max)
[payload] nvarchar(max)
[exception] nvarchar(max)
[failed_at] datetime
タスクに失敗したExceptionは、SendMailのfailedメソッドに渡されるため、SendMailで独自にメソッドを実装し、さらに処理する必要があります.タスクの実行に失敗した原因は、パラメータエラー、試行回数が制限を超えた、タイムアウト、handleメソッドで例外が投げ出されたなど、多くの場合、失敗したタスクとして処理されます.
4.7タスク実行前後の処理
Laravelは、App/Providers/AppServiceProviderのboot()に次のコードを追加するタスク実行前後の処理エントリを提供します.
public function boot()
{
Queue::before( function (JobProcessing $event) {
Log::info(" ");
});
Queue::after( function (JobProcessed $event) {
Log::info(" ");
});
}
渡された$eventには、タスクの詳細、いくつかの簡単な例があります.
$event->connectionName
$event->job
$event->job->payload()
5 Redisドライバキューの使用
5.1 LaravelインストールPredisパッケージ
LaravelでRedisを使用する前に、Composerでpredis/predisパッケージをインストールする必要があります.
composer require predis/predis
上記の拡張はLaravelがRedisと付き合うのを助けるもので、私たちはまだRedisサービスが不足しています.この時点で.EnvのQUEUE_CONNECTIONはredisに変更され、アクセス時にエラーが表示されます.
Predis \ Connection \ ConnectionException (10061)
����Ŀ����������ܾ��������ӡ� [tcp://127.0.0.1:6379]
5.2 Redisサービスの構成
Redis公式サイトでソースコードをダウンロードしてから、自分でコンパイルすればいいです.公式にはWindows版は提供されていません.RedisのWindows版はマイクロソフトのワークグループによって維持されています.GitHubページから見つけることができます.しかし、メンテナンスは行われていないようで、最新バージョンは16年にリリースされた3.2.100です.Linuxでは簡単な運転で
./redis-server
サービスを開始し、
./redis-cli
を使用してRedisを試します.使用も簡単です.set key valueとget keyです.Windowsでインストール後、コマンドラインでインストールディレクトリにcd
C:\Program Files\Redis>redis-server redis.windows.conf
C:\Program Files\Redis>netstat -an|find "6379"
TCP 127.0.0.1:6379 0.0.0.0:0 LISTENING
Redisサービスを開始できます.Redisサービスの停止は、次のコマンドによって行われます.
C:\Program Files\Redis>redis-server --service-stop