検索
ホームページPHPフレームワークLaravelLaravelフレームワークでのキューの使い方の紹介(コード付き)

この記事では、laravel フレームワークでのキューの使用方法を紹介します (コード付き)。必要な方は参考にしていただければ幸いです。

実際のプロジェクト開発では、テキスト メッセージの送信や電子メールの送信など、軽量のキューが必要な状況によく遭遇します。これらのタスクは、kafka や RabbitMQ などの重量のあるメッセージ キューを使用するのに十分ではありませんが、非同期、再試行が必要です。 、同時実行制御およびその他の機能。一般に、関連する機能を実装するには、Redis、Beanstalk、Amazon SQS を使用することがよくあります。Laravel は、さまざまなバックグラウンド キュー サービスに統合された API を提供します。この記事では、最も広く使用されている Redis キューを紹介します。

laravelのキューサービスを説明する前に、まずredisベースのキューサービスについて話す必要があります。まず第一に、redis はキャッシュ用に設計されていますが、その独自の特性のいくつかにより、メッセージ キューにも使用できます

redis キュー データ構造

リスト リンク リスト

FIFO などのメッセージ キューの redis 機能 (最初に、 in-first-out) (out) は実装が簡単で、先頭からデータを取得し、末尾からデータを詰め込むためのリスト オブジェクトが必要なだけです。

関連コマンド: (1) 左インおよび右アウト: lpush/rpop; (2) 右インおよび左アウト: rpush/lpop。

このシンプルなメッセージキューは実装が簡単です。

Zset 順序セット

一部のタスク シナリオでは、タスクをすぐに実行する必要はありませんが、遅延する必要があるタスクもあります。タスクが失敗した場合は再試行する必要があります。これらの機能は、リストに依存するだけでは実現できません。現時点では、順序付けられた Redis のコレクションが必要です。

Redis 順序付きセットは Redis セットに似ており、同じ文字列を含まないコレクションです。それらの違いは、順序付きセットの各メンバーがスコアに関連付けられていることです。スコアは、順序付きセットのメンバーを最低スコアから最高スコアまでランク付けするために使用されます。

順序付きセットと遅延タスク単独の間には関係はありませんが、順序付きセットのスコアを遅延タスクの開始時刻に設定し、順序付きセットをポーリングして期限切れのタスクを処理用に取り出すことができます。このようにして、タスクを遅延させる機能が実現される。

再試行が必要な重要なタスクの場合、タスクが実行される前に、タスクは順序付きコレクションに入れられ、タスクの最長実行時間が設定されます。タスクが正常に実行されると、タスクは順序付けられたコレクションから削除されます。指定された時間内にタスクが完了しない場合、順序付きセット内のタスクはキューに戻されます。

関連コマンド:

(1) ZADD 順序付きセットに 1 つ以上のメンバーを追加するか、既に存在する場合はそのスコアを更新します。

(2) ZRANGEBYSCORE スコアによって順序付けられたメンバー範囲のセットを返します。

(3) ZREMRANGEBYRANK 指定されたインデックス内の順序付きセットからすべてのメンバーを削除します。

laravelキューサービスのタスクスケジューリング

キューサービスのタスクスケジューリングプロセスは次のとおりです:

Laravelフレームワークでのキューの使い方の紹介(コード付き)

laravelのキューサービスは2つのプロセスによって制御され、1つはプロデューサー、もう1つはコンシューマーです。これら 2 つのプロセスは 3 つの Redis キューを操作します。そのうちの 1 つは即時タスクを担当する List と、遅延タスクと保留中のタスクを担当する 2 つの Zset です。

プロデューサーは、タスクを Redis にプッシュする責任があります。即時タスクの場合は、デフォルトで queue:default にプッシュされます。遅延タスクの場合は、queue:default:layed にプッシュされます。

コンシューマーは 2 つのキューをポーリングし、キューからタスクを継続的に取り出し、まずタスクを queue:default:reserved に入れ、次に関連するタスクを実行します。タスクが正常に実行された場合、queue:default:reserved 内のタスクは削除され、そうでない場合は queue:default:layed キューに戻されます。

laravelキューサービスの全体の流れ

タスク分散処理:

Laravelフレームワークでのキューの使い方の紹介(コード付き)

タスクプロセッサの動作:

Laravelフレームワークでのキューの使い方の紹介(コード付き)

タスクの作成

キュー設定

'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'default',
        'retry_after' => 90,
    ],

config/queue.phpで設定
一般的に言えばデフォルトの redis 設定は上記のとおりです。 connection はデータベース内の redis の接続名です。redis クラスターを使用している場合は、キー ハッシュ タグを使用する必要があることに注意してください。 is, {default}; タスクが retry_after 時間を超えて実行されると、タスクはキューに戻されます。

タスククラスの作成

一般的に、タスククラスの構造は非常に単純で、キューがこのタスクを呼び出すために使用するハンドルメソッドのみが含まれています。

タスクを同期的に実行するのではなくキューにプッシュしたい場合は、IlluminateContractsQueueShouldQueue インターフェースを実装する必要があります。

Redis や sqs などの特定の接続にタスクをプッシュする場合は、connect 変数を設定する必要があります。

タスクを特定のキューにプッシュしたい場合は、キュー変数を設定できます。

如果想要让任务延迟推送,那么需要设置 delay 变量。

如果想要设置任务至多重试的次数,可以使用 tries 变量;

如果想要设置任务可以运行的最大秒数,那么可以使用 timeout 参数。

如果想要手动访问队列,可以使用 trait : IlluminateQueueInteractsWithQueue。

任务的分发
分发服务
写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:

class PodcastController extends Controller
{
    public function store(Request $request)
    {
        // 创建播客...

        ProcessPodcast::dispatch($podcast);
    }
}

如果想延迟执行一个队列中的任务,可以用任务实例的 delay 方法。

 ProcessPodcast::dispatch($podcast)
                ->delay(Carbon::now()->addMinutes(10));

通过推送任务到不同的队列,可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。要指定队列的话,就调用任务实例的 onQueue 方法:

ProcessPodcast::dispatch($podcast)->onQueue('processing');

如果使用了多个队列连接,可以将任务推到指定连接。要指定连接的话,可以在分发任务的时候使用 onConnection 方法:

ProcessPodcast::dispatch($podcast)->onConnection('redis
');

以上がLaravelフレームワークでのキューの使い方の紹介(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
LARAVELバージョン:移行チュートリアルLARAVELバージョン:移行チュートリアルMay 14, 2025 am 12:17 AM

Laravelの移行システムは、最新バージョンでどのような新機能とベストプラクティスを提供していますか? 1。多型関係にnullablemorphs()を追加しました。 2。列()メソッドが導入され、列の順序が指定されます。 3.孤立した記録を避けるために、外国のキー制約の処理を強調します。 4.インデックスを適切に追加するなど、パフォーマンスを最適化することをお勧めします。 5.移行の実装と記述名の使用を提唱します。

Laravelの最新のLTSバージョンは何ですか?Laravelの最新のLTSバージョンは何ですか?May 14, 2025 am 12:14 AM

laravel10、relietinginfebruary2023、isthelatestltsversion、supportedforthreeyears.itrequiresphp8.1、拡張、forfeatureflagsを拡張し、エラーハンドリング、洗練されたもの、および実質的な形成、特にineLoquentormを改善します。

更新を維持:最新のLaravelバージョンの最新機能更新を維持:最新のLaravelバージョンの最新機能May 14, 2025 am 12:10 AM

Laravelの最新バージョンでは、複数の新機能を紹介します。1。Laravelpennantは、機能フラグを管理するために使用され、新しい機能を段階的にリリースできるようにします。 2。LARAVELREVERBは、リアルタイムコメントなどのリアルタイム機能の実装を簡素化します。 3. Laravelviteは、フロントエンドの建設プロセスを加速します。 4.新しいモデル工場システムは、テストデータの作成を強化します。 5.エラー処理メカニズムを改善し、より柔軟なエラーページのカスタマイズオプションを提供します。

Laravelでソフト削除の実装:ステップバイステップチュートリアルLaravelでソフト削除の実装:ステップバイステップチュートリアルMay 14, 2025 am 12:02 AM

softleteinelelavelisling -memptry -bracechortsdevetus -teedeecetovedlydeveledteecetetecedelave

現在のLaravelバージョン:最新リリースと更新を確認してください現在のLaravelバージョン:最新リリースと更新を確認してくださいMay 14, 2025 am 12:01 AM

laravel10.xisthecurrentversion、newfeatureslikeNumsuportineloquentModelsEndimprovedeModelbindingwithenums.theseupdatesenhanceCodereadabilityandsecurity、butrequirecarefulplanningandinningandincrementarementalementalementation forasucesupgrade。

Laravelの移行の使用方法:ステップバイステップのチュートリアルLaravelの移行の使用方法:ステップバイステップのチュートリアルMay 13, 2025 am 12:15 AM

laravelMigrationSstreamLedinedAtabaseManagementionbyAllowingsCheMachAngESTOBEDEDINPHPCODE

最新のLaravelバージョンを見つける:迅速で簡単なガイド最新のLaravelバージョンを見つける:迅速で簡単なガイドMay 13, 2025 am 12:13 AM

Laravelの最新バージョンを見つけるには、公式Webサイトlaravel.comにアクセスして、右上隅の「ドキュメント」ボタンをクリックするか、Composersコマンド「Composershowlaravel/Framework | Grepversions」を使用できます。更新され続けると、プロジェクトのセキュリティとパフォーマンスの向上に役立ちますが、既存のプロジェクトへの影響を考慮する必要があります。

Laravelで更新されたまま:最新バージョンを使用することの利点Laravelで更新されたまま:最新バージョンを使用することの利点May 13, 2025 am 12:08 AM

Youは、loredupdateTotheTothESTLARAVERVERSIONFORPERFORMANCEIMPROVEMENTS、強化セキュリティ、NewFeatures、BetterCommunitySupport、およびLong-Termmantenance.1)パフォーマンス:laravel9'seloquentormizationsenhanceapplicationspeed.2)laravel8introducedbetter

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。