概要
キューの概念: 簡単に説明します。分からない場合は自分で解決できます。 (追記: Laravel のバージョンは 5.1)
アプリサーバー開発では、次の状況によく遭遇します:
大きなタスクは 1、2、3、4 つの小さなタスクに分割でき、そのうち 2 の完了は 1 に依存します。 、4の完了は2に依存します。この場合、1、2、および 4 はトランザクションとして理解でき、順番に実行する必要があり、そうしないとタスクを完了できません。ただし、タスク 3 はタスク 1、2、および 4 とは何の関係もありません。タスク 3 は独立して完了でき、誰が最初に誰が最後に来るかは関係ありません。具体的には、メッセージのプッシュ、電子メールの送信などのタスクは 3 番目のタスクと同じ属性です。
メッセージキューの理解この部分については、典型的な生産者/消費者モデルに属します。プロデューサー プログラムはタスクを作成し、キューに入れます。次に、コンシューマー プログラムがキューを確認し、タスクを見つけて消費します。理論的な理解は明らかです。実際に見てみましょう。
laravel によって実装されたメッセージキュー公式ドキュメント: laravel のキュー
メッセージキューモデルを通して、プロデューサーが存在する必要があることがわかったので、laravel Woolen クロスでこのプロデューサーを構築する方法は?とてもシンプルです。
php 職人 make:command PushMessage ?queued
実行後、アプリ ディレクトリに appCommandsPushMessage.php が表示されます。このファイルを開くと、Command クラスが統合されていることがわかりますが、ここにはありません。 . クラス (バージョン 5.0 を使用している場合は存在しますが、5.1 には存在しません)。心配しないでください。新しい appCommandsCommand.php を自分で作成してください。コードの内容は次のとおりです。
<?phpnamespace App\Commands;abstract class Command { //}
OK!次に、もう一度 appCommandsPushMessage.php ファイルに戻ります。このファイルにはメソッド ハンドルが含まれています。ここでは、デモンストレーションの目的で、ファイルを書き込む操作を使用します。そこに次の内容を書きます
file_put_contents('D:/webApp/test.txt', 'hello world!');
この時点で、プロデューサーは書き終わったので、コントローラーを見つけます。このプロデューサーによって生成されたコンテンツをキューにプッシュします。ここで説明するのは、appHttpControllersTestController.php で行った呼び出しです。次のソースコードを投稿しましょう:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Requests;use App\Http\Controllers\Controller;use Queue;use App\Commands\PushMessage;class TestController extends Controller { /** * Display a listing of the resource. * * @return Response */ public function index() { Queue::later(60, new PushMessage());// 推进队列 return view('welcome'); }}
ここで注意する必要がある点が 2 つあります:
① ここでは Queue Facade を使用していますが、公式の推奨では Bus Facade を使用することが推奨されています。この 2 つは同じ効果を持ちます。自分で比較検討してください。 。
② 効果を確認するために、キュー内のタスクを実行するために特別に 60 秒の遅延を追加しました。
生産するだけでは十分ではなく、生産された製品を保管する場所が必要です。ここでは簡単にするために、データベース方式を使用します。他の方法も簡単にできるので、ぜひ自分で試してみてください。データベースを使用するには、次の設定が必要です:
config/queue.php を開き、デフォルトのキュードライバーをデータベースに変更します:
default' => env('QUEUE_DRIVER', 'database')
構成後、データベース接続サービスを実行します。これについてはもう話しません。 config/app.php で設定します
次の 2 つのコマンドを実行します:
phpArtisan queue:table
phpArtisan Migrate
保存したタスクのリストページが完成しました。次のステップは消費することです。それはとても簡単です。
phpArtisan queue:listen
テストされたキューサービス今度は結果をテストします。私のローカル環境を例に考えてみましょう。まずプログラムを実行し、いくつかのタスクを生成します: ブラウザで開きます: http://127.0.0.1/laravel/public/index.php この時点でデータベースを開くと、次の内容が表示されます:
次に、リスニング プログラム DOS を実行すると、次のメッセージが表示されたら、プログラムが実行されたことを意味します:
この時点で、対応するディレクトリに移動すると、ファイル test.txt が表示されます。
さらに詳しく知りたい場合は、公式ドキュメントを参照してください。 Laravel の Facade を作成するための変更と準備 この概念を理解するのに長い時間がかかりました。