Laravelメッセージキュー

2238 ワード

Laravelメッセージキュー##
本明細書で説明するメッセージキューはBeanstalkdに基づいており、いくつかの煩雑なタスクはメッセージキューに格納され、バックグラウンドで非同期に処理されます.このシリーズを読み、実践すると、直結DBよりも多くの同時性を向上させる多層サービスアーキテクチャを構築できます.
    Redis Cache        DB
  • LNMP結合PHPフレームLaravelの使用
  • Laravel結合Redis
  • 本論文
  • 一、設定##
    1.コンフィギュレーションファイルのconfig/queueを変更する.php
      default `beanstalkd`,    connections beanstalkd,beanstalkd         ,          
    
  • 環境変数を修正する.env QUEUE_DRIVERをbeanstalkdに設定
    公式ドキュメントには、タスクが同期的に実行されるようにする手順はありません.構成を忘れないでください.
  • composerを使用してpda/pheanstalk~3.0拡張をインストールします.
    二、beanstalkd##をインストールする
    sudo yum install beanstalkd
    

    beanstalkdのインストール
    sudo service beanstalkd start
    

    開始
    三、作成コマンド##
    データベース操作やピクチャ処理などのタスクを実行するコマンドを作成します.
    cdはあなたのエンジニアリングディレクトリの下で、次のコマンドを実行して、コマンドを生成します.
    php artisan make:command TestQueueToEchoMsg --queued
    

    artisanはあなたのCommandsディレクトリにTestQueueToEchomsgクラスを生成します.handleメソッドが含まれています.あなたのタスクはここで実行されます.
    ここではタスクが予定通り実行されるかどうかをテストするだけで、簡単にlogを打つだけでいいです.handleの方法は以下の通りです.
    public function handle()
        {
            Log::info('at '.time().' log by queue and the msg is:'.$this->msg);
        }
    

    四、coding##
  • router.phpは、次のコード
    Route::get('toQueue/{msg}', 'QueueController@triggerQueue');
    
  • を追加する.
  • QueueControllerには、次のコード
    public function triggerQueue( $msg ){
        Log::info('ready to trigger2');
        
    
        $this->dispatch(new TestQueueToEchoMsg($msg)); //commond bus     ,    
    
        // $date = Carbon::now()->addSeconds(15);
        // // $date = Carbon::now()->addMinutes(15);
        // Queue::later($date, new TestQueueToEchoMsg($msg)); //      ,    
        
        // Queue::push( new TestQueueToEchoMsg($msg));  //      ,    
        
        Log::info('triggered');
        echo "trgiered2";
    }
    
    
  • が追加されています.
    五、傍受キュー##
    次のコマンドを実行して、キューをリスニングします.新しいタスクがある場合、プログラムはそれをリスニングして実行します.
    php artisan queue:listen
    

    六、列を走らせて!
    ブラウザに入力できるようになりましたhttp://host/toQueue/helloを選択し、storage/logs/今日のlogファイルを開くと、ログが打たれ、非同期であることがわかります.