この記事では、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のキューサービスは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キューサービスの全体の流れ
タスク分散処理:
タスクプロセッサの動作:
タスクの作成
キュー設定
'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 サイトの他の関連記事を参照してください。

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

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

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

softleteinelelavelisling -memptry -bracechortsdevetus -teedeecetovedlydeveledteecetetecedelave

laravel10.xisthecurrentversion、newfeatureslikeNumsuportineloquentModelsEndimprovedeModelbindingwithenums.theseupdatesenhanceCodereadabilityandsecurity、butrequirecarefulplanningandinningandincrementarementalementalementation forasucesupgrade。

laravelMigrationSstreamLedinedAtabaseManagementionbyAllowingsCheMachAngESTOBEDEDINPHPCODE

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

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