contentlaravel-async-queueでLaravelの非同期キューを小さく使い始めるPHPLaravelLaravelでキューを使うにはキューワーカーを立てる必要がありますが、キューワーカーのプロセス監視方法や、キューワーカーを使用しているアプリケーションのデプロイ方法を考える必要があり、結構面倒臭いです。キューワーカーが不要な同期キュードライバもありますが、これだと非同期処理の旨味がありません。laravel-async-queuehttps://github.com/barryvdh/laravel-async-queuelaravel-async-queueというパッケージが非同期キュードライバを提供しています。この非同期キュードライバを使うと、ジョブをバックグラウンドプロセスで即時に実行できるようになり、キューワーカーを立てることなく非同期処理の旨味を得ることができます。インストール方法なお、この記事では下記のバージョンのソフトウェアを使用しています。v0.7.3laravel-async-queueをComposerでインストールします。barryvdh/laravel-async-queueconfig/app.phpにサービスプロバイダを追加します。config/app.phpBarryvdh\Queue\AsyncServiceProvider::class,config/queue.phpのdefaultオプションをasyncに変更します。connectionsオプションに非同期キュードライバ用の設定を追加します。60,],動作テスト動作テストをしてみます。テスト用のコントローラとイベントリスナーとイベントを用意します。],];コントローラのアクションを実行すると、下記のようなログが出力されます。{"uid":"535fd9a","process_id":1046}1→3→2となっており、非同期処理されていることがわかります。プロセスIDとUIDもコントローラとイベントリスナーで別になっています。ちなみに同期ドライバの場合です。{"uid":"a9173e4","process_id":1020}1→2→3となっており、同期処理です。プロセスIDとUIDもコントローラとイベントリスナーで同じです。失敗ジョブを扱えるようにする非同期キュードライバは、キューワーカーを使っていないため、ジョブが1回失敗すると自動ではリトライされません。ジョブ失敗ベントが発行されず、失敗したジョブはjobsテーブルに残ったままで、failed_jobsテーブルに入りません。これだと運用がつらいので、ジョブ失敗をSlackに通知したりできるように、ジョブ失敗イベントが発行されるようにします。イベントリスナーの$tiresプロパティを1に設定すると、ジョブ失敗ベントが発行されるようになります1。...}トレイトにしておくと便利かもしれません。...}これでジョブ失敗イベントが発生するようになります。同時に、失敗ジョブがjobsテーブルから消えるようになります。このままだと失敗ジョブがjobsテーブルにもfailed_jobsテーブルにも残らなくなってしまうので、失敗ジョブをfailed_jobsテーブルに入れる処理をジョブ失敗イベントのコールバックとして書くことにします。これはAppServiceProviderのbootメソッドに書くのがいいと思います。...});ちなみに、logメソッドはfailed_jobsテーブルのIDが返ってきます。Slackに通知する時に使うと、後でジョブを手動でリトライする際に便利でいいと思います。これで失敗ジョブがfailed_jobsテーブルに入るようになります。リトライが必要な場合は、下記のArtisanコマンドを実行します。<failed_jobsテーブルのID>これでfailed_jobsテーブルの失敗ジョブがjobsテーブルに戻ります。下記のArtisanコマンドを実行するとジョブを実行できます。engineer.https://github.com/ngmyFollow株式会社ホワイトプラス「日々の生活と心にゆとりと豊かさ」を生むためのサービスを提供している会社です。upLoginユーザーは見つかりませんでした。