LaravelでのQueueの使用

May 25, 2018 pm 01:48 PM
laravel queue 使用

Laravel Queue Service は、さまざまなバックグラウンド キューに統合された API を提供します。この記事では、Laravel で Queue を使用するための最も基本的な操作チュートリアルを中心に、サンプル コードを通じて詳しく紹介します。お役に立てれば幸いです。

前書き

laravelのキューサービスは他のキューサービスと何ら変わりはなく、人間の思考に最も沿った最も単純で一般的なプロセスです。キュー情報を保存する場所があり、 PHP プロセスが実行中である タスクが書き込まれ、別の PHP デーモンがキュー情報をポーリングし、実行要件を満たすタスクが実行されて削除されます。 PHP は URL 駆動の同期言語であり、本質的にブロックするため、Laravel がキュー情報をクエリして実行するためのデーモン ツールを提供することは驚くことではありません。

ここ 2 日間で Laravel のキューに触れるのは初めてで、かなり時間がかかりました。 。 。苦労したのに、まだ Laravel の使い方がよくわからないと感じています。ドキュメントは比較的シンプルでまとめられており、ソースコードを読むのは少し難しいです (ただし、ソースコードを読んで、ゆっくりデバッグして検証します)。今でも最も信頼できるものです)。

以下は、キューの最も基本的な操作のみを使用する私の簡単なデモです。より高度な操作にはさらに時間がかかります:)

Laravel キューを使い始めるのが難しい私のような学生は、それを共有できます。

構成

Redisパッケージを追加します

composer.jsonのrequireセクションに「predis/predis」: "~1.0"を追加し、composerを起動して更新します。

database.php

database.php設定ファイルにredisデータベース部分を設定します。デフォルトでデフォルトの接続があります。これを使用してください:)

このデフォルトの接続に必要な設定項目に従って編集します。 .env 構成ファイルで、REDIS_HOST、REDIS_PASSWORD、および REDIS_PORT に、独自のサーバーの Redis の対応する値を入力します。

queue.php

まず、.env で QUEUE_DRIVER を構成する必要があります。今は Redis を使用する予定なので、それを Redis に構成します。

次に、queue.php の接続セクションで redis 接続を構成します。ここで、connection の対応する値は、database.php の redis のデフォルト接続です。

タスククラス

次のステップは、実際の操作クラスを記述することです。Laravel は、タスククラスの作成を簡素化するための職人コマンドを提供します。

php artisan make:job Demo

ジョブディレクトリがアプリディレクトリに生成されます。すでに Demo.php Task クラスがあります。

Lumen にはこの職人コマンドはありませんが、デフォルトでは ExampleJob.php がすでに書かれているので、それをコピーして名前を変更するだけです。
まず、ハンドル メソッドで簡単なログ出力テストを作成します。

Log::info('Hello, queue');

タスクの発行

次に、タスクをキューにプッシュするエントリ関数を作成します。補助関数dispatch()を使用します:

Laravelで次のメソッドを使用します:

Demo::dispatch();

Lumenで次のメソッドを使用します:

dispatch(new Demo);

キューを開きます

すべてがうまくいけば、これが最後のステップです。コマンドラインで実行します:

php artisan queue:listen --queue=default

キューを監視し、次のような簡単な実行ステータスを出力します:

[2017-11-07 02:12:47] Processing: App\Jobs\Demo
[2017-11-07 02:12:47] Processed: App\Jobs\Demo

問題がない場合は、このキュー スクリプトをバックグラウンドで実行させることができます:

php artisan queue:work --daemon --quiet --queue=default 1>> /dev/null 2>&1

高度な実行: )

キューにプッシュするとき、通常はパラメーターを渡す必要がありますが、ここでどのように渡すのでしょうか?

パラメータの送信

受け渡し


エントランス関数では、パラメータメソッドは次のように渡されます:

は次の方法を使用します:

$param = 'Stephen';
Demo::dispatch($param);

lumenは次の方法を使用します:

$param = 'Stephen';
dispatch(new Demo($param));

受信

タスククラスでパラメータを受け取る方法は以下の通りです:

protected $param;
/**
 * Create a new job instance.
 *
 * @return void
 */
public function __construct($param)
{
  $this->param = $param;
}
/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{
  Log::info('Hello, ' . $this->param);
}

今回は初めての試みですが、遅延配信、エラー処理、優先度、障害処理など、高度な使い方がたくさんあります。今後も書き続けます:) マルチキュー

これは考慮する必要がある問題です。デフォルトと呼ばれるキューにすべてのタスクを入れることは不可能です。キューを管理します。

別のキューを指定するには、dispatch() の直後に onQueue() メソッドを実行するだけです。当然のことですが、queue.php 設定ファイル内の redis 設定キューがデフォルトから {default} に変更されます。これにより、キューの名前がランタイムから動的に取得できるようになります。ハードコーディングされています。

Lumen フレームワークを使用している場合、直接記述するとエラーが発生します: 文字列のメンバー関数 onQueue() を呼び出します。

その理由は、Lumen の Job 基本クラスが IlluminateFoundationBusDispatchable トレイトを使用せず、IlluminateBusQueueable の onQueue() メソッドを直接使用しているためです。

これで、Job クラスが IlluminateBusQueueable トレイトを使用していることが明らかになったため、Job クラスでこの onQueue() メソッドを呼び出す必要があります。

えー

キューを開くとき:

php artisan queue:work --queue=emails

这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。

相关推荐:

学习Laravel5的Eloquent 关系

laravel5.5控制器传参顺序问题及解决方案

Laravel 5.5的可相应接口如何使用?

以上がLaravelでのQueueの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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で紹介システムを実装する方法は? Aug 02, 2025 am 06:55 AM

紹介テーブルを作成して、紹介、紹介、推奨コード、使用時間を含む推奨関係を記録します。 2.推奨データを管理するために、ユーザーモデルのBelongStomanyとHasmanyの関係を定義します。 3.登録時に一意の推奨コードを生成します(モデルイベントを通じて実装できます)。 4.登録中にパラメーターをクエリすることにより、推奨コードをキャプチャし、検証後に推奨関係を確立し、自己称賛を防ぎます。 5.推奨されるユーザーが指定された動作(サブスクリプション順序)を完了した場合、報酬メカニズムをトリガーします。 6.共有可能な推奨リンクを生成し、Laravel Signature URLを使用してセキュリティを強化します。 7.推奨事項の総数や変換された番号など、ダッシュボードに推奨統計を表示します。データベースの制約、セッション、またはCookieが持続することを確認する必要があります。

Laravelで雄弁でアクセサと突然変異体を使用する方法は? Laravelで雄弁でアクセサと突然変異体を使用する方法は? Aug 02, 2025 am 08:32 AM

Accessors andMutatorsin andlaravel'seloquentormallowyoutoformatormatulatemodelattributestributestributestributes.1.useaccessorstocustomizeattributertrieval、そのような存在するfirst_nameviagetfirstmeattribute($ valuation)

Laravelのリポジトリ契約とは何ですか? Laravelのリポジトリ契約とは何ですか? Aug 03, 2025 am 12:10 AM

リポジトリパターンは、データアクセスロジックからビジネスロジックを切り離すために使用される設計パターンです。 1.インターフェイス(契約)を介してデータアクセスメソッドを定義します。 2。特定の操作は、リポジトリクラスによって実装されます。 3.コントローラーは、依存関係噴射を介してインターフェイスを使用し、データソースに直接接触しません。 4.利点には、きちんとしたコード、強力なテスト可能性、簡単なメンテナンス、チームのコラボレーションが含まれます。 5。中規模および大規模なプロジェクトに適用されると、小規模プロジェクトはモデルを直接使用できます。

Laravelで雄弁でサブQueriesを使用する方法は? Laravelで雄弁でサブQueriesを使用する方法は? Aug 05, 2025 am 07:53 AM

laraveLeLoquentsSubqueriesInselect、from、where、andorderbyclauses、enableing flexibledataryvalwithoutrawsql;

LaravelでRestful APIを作成する方法は? LaravelでRestful APIを作成する方法は? Aug 02, 2025 pm 12:31 PM

Laravelプロジェクトを作成し、データベース環境を構成します。 2。職人を使用して、モデル、移行、コントローラーを生成します。 3。API.phpでAPIリソースルーティングを定義します。 4.コントローラーに追加、削除、変更、クエリメソッドを実装し、要求の確認を使用します。 5. LARAVELSANCTUMをインストールして、API認証を実装し、ルートを保護します。 6. JSON応答形式を統合し、エラーを処理します。 7. Postmanおよびその他のツールを使用してAPIをテストし、最後に完全で拡張可能なRestfulapiを取得します。

Laravel Cashierで定期的な支払いを処理する方法は? Laravel Cashierで定期的な支払いを処理する方法は? Aug 06, 2025 pm 01:38 PM

laravelcashierviacomposerandconfigure andbillabletrait.2.createSubscriptionPlansinsinsShashboardandnoteplanids.3.collectpaymentmethodusingsingsingsingsingsingsingStoreitviasetupintent.4.subscribeusertoaplanusingnewsubautpay()

Laravel MVC:アーキテクチャの制限 Laravel MVC:アーキテクチャの制限 Aug 03, 2025 am 12:50 AM

laravel'simplementation ofmvchaslimitations:1)controllersorsersoftentrersorsoftenterressoftendediding whichmodelandviewtouse、leading to'fat'controllers.2)eloquentmodelscantakeOntOntOMANYRESPONSIBITITIONSBEYONDDATAREPRENTATION.3)

MVCの理解:Model-View-ControllerパターンをLaravelがどのように実装するか MVCの理解:Model-View-ControllerパターンをLaravelがどのように実装するか Aug 02, 2025 am 01:04 AM

laravelimplementsthemvcpatternbyusingmodelsfordatamanagement、controllers forbusinesslogic、andviewsforpresentation.1)ModelinelaLavellaLavelFulormshandlingDataAndRelations.2)ControlerSersManageTheEtheflowBetweenModelsAndviews.3)ViewsuseBladetemplationfor

See all articles