成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Laravel實現隊列的示例代碼

瀏覽:11日期:2022-06-06 17:08:26
目錄
  • 一:隊列配置
    • 1:隊列相關配置
    • 2:不同隊列依賴
  • 二:創建隊列任務
    • 三:任務分發
      • 1:默認分發
      • 2:延時分發
      • 3:指定隊列分發
      • 4:指定驅動分發
      • 5:指定驅動和隊列分發
    • 四:任務處理
      • 五:失敗任務處理
        • 六:使用Supervisor管理隊列
          • 1:Supervisor安裝
          • 2:配置Supervisor
          • 3:啟動Supervisor
        • 補充

          一:隊列配置

          隊列的配置文件放置在config/queue.php文件中,laravel框架中支持的隊列驅動有:sync, database, beanstalkd, sqs, redis,null對應著:同步(本地使用)驅動,數據庫驅動,beanstalkd ,Amazon SQS ,redis,null 隊列驅動用于那些放棄隊列的任務

          1:隊列相關配置

          (1):隊列驅動配置

          "default" => env("QUEUE_DRIVER", "sync"),//隊列驅動設置
          

          (2):不同驅動相關配置

          "connections" => [
              syns驅動配置
              "sync" => [
          "driver" => "sync",
              ],
              數據庫驅動配置
              "database" => [
          "driver" => "database",
          "table" => "jobs",//數據庫驅動配置使用的數據庫
          "queue" => "default",
          "retry_after" => 90,//指定了任務最多處理多少秒后就被當做失敗重試,比如說,如果這個選項設置為 90,那么當這個任務持續執行了 90 秒而沒有被刪除,那么它將被釋放回隊列
              ],
              //beanstalkd驅動配置
              "beanstalkd" => [
          "driver" => "beanstalkd",
          "host" => "localhost",//使用beanstalkd驅動地址
          "queue" => "default",
          "retry_after" => 90,//指定了任務最多處理多少秒后就被當做失敗重試,比如說,如果這個選項設置為 90,那么當這個任務持續執行了 90 秒而沒有被刪除,那么它將被釋放回隊列
          "block_for" => 0,
              ],
              //sqs驅動配置
              "sqs" => [
          "driver" => "sqs",
          "key" => env("AWS_ACCESS_KEY_ID"),
          "secret" => env("AWS_SECRET_ACCESS_KEY"),
          "prefix" => env("SQS_PREFIX", "https://sqs.us-east-1.amazonaws.com/your-account-id"),
          "queue" => env("SQS_QUEUE", "your-queue-name"),
          "region" => env("AWS_DEFAULT_REGION", "us-east-1"),
              ],
              //redis驅動配置
              "redis" => [
          "driver" => "redis",
          "connection" => "default",//使用哪個連接的redis,redis配置是在config/database.php文件中
          "queue" => env("REDIS_QUEUE", "default"),
          "retry_after" => 90,
          "block_for" => null,
              ],
           
          ],
          

          2:不同隊列依賴

          (1):數據庫驅動

          使用數據庫驅動需要生成一個隊列驅動表

          php artisan queue:table
          php artisan migrate
          

          執行上面的命令之后會發現數據庫中會增加一個jobs表

          (2):redis驅動

          使用redis驅動需要安裝一個predis/predis 拓展

          composer require predis/predis
          

          (3):Amazon SQS驅動

          使用Amazon SQS驅動時需要安裝aws/aws-sdk-php拓展

          composer require aws/aws-sdk-php
          

          (4):Beanstalkd驅動

          使用Beanstalkd驅動需要安裝pda/pheanstalk拓展

          composer require pda/pheanstalk
          

          二:創建隊列任務

          php artisan make:job TestJobs
          

          執行上面的命令創建一個隊列任務類,這時候會發現在app/jobs目錄下生成一個TestJobs.php文件

          簡單的隊列任務類實例:

          <?php
          namespace App\Jobs;
          use App\Models\blog\User;
          use Illuminate\Bus\Queueable;
          use Illuminate\Queue\SerializesModels;
          use Illuminate\Queue\InteractsWithQueue;
          use Illuminate\Contracts\Queue\ShouldQueue;
          use Illuminate\Foundation\Bus\Dispatchable;
          class TestJobs implements ShouldQueue
          {
              use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
              /**
               * 任務最大嘗試次數。
               *
               * @var int
               */
              public $tries = 5;
              /**
               * 任務運行的超時時間。
               * 指定了 Laravel 隊列處理器最多執行多長時間后就應該被關閉掉
               * --timeout 應該永遠都要比 retry_after 短至少幾秒鐘的時間。這樣就能保證任務進程總能在失敗重試前就被殺死了。
               * 如果你的 --timeout 選項大于 retry_after 配置選項,你的任務可能被執行兩次
               *
               * @var int
               */
              public $timeout = 120;
              public $info;
              /**
               * Create a new job instance.
               *
               * @return void
               */
              public function __construct($info)
              {
          //
          $this->info = $info;
              }
              /**
               * Execute the job.
               *
               * @return void
               */
              public function handle()
              {
          //
          $user = new User();
          $user->user_no = $this->info["user_no"];
          $user->user_name = $this->info["user_name"];
          $user->save();
              }
          }

          三:任務分發

          1:默認分發

          $info = [
              "user_no"=>"006",
              "user_name"=>"testName"
          ];
          TestJobs::dispatch($info);
          

          2:延時分發

          TestJobs::dispatch($info)->delay(Carbon::now()->addMinutes(10));//表示延時十分鐘分發任務
          

          3:指定隊列分發

          TestJobs::dispatch($info)->onQueue("processing");//表示使用默認驅動的processing隊列
          

          4:指定驅動分發

          TestJobs::dispatch($info)->onConnection("redis");//使用redis驅動的默認隊列
          

          5:指定驅動和隊列分發

          TestJobs::dispatch($info)->onConnection("redis")->onQueue("processing");//使用redis驅動的processing隊列
          

          四:任務處理

          php artisan queue:work
          

          執行后我們會發現user表中發現多了一條user_no為006,user_name為testName數據,但是如果你指定了驅動和隊列的話,這時候執行php artisan queue:work,你就會發現數據庫中沒有數據加進去,這是因為php artisan queue:work命令是對默認驅動和'default'隊列監聽,這時候就要使用:

          php artisan queue:work redis --queue="processing"  //redis表示指定驅動 processing表示指定隊列
          

          五:失敗任務處理

          php artisan queue:failed-table
          php artisan migrate
          

          執行上面命令后會在數據庫中增加一張failed_jobs表,專門用于存儲失敗的任務信息,在TestJobs類中添加一個failed方法處理失敗隊列

          /**
           * 要處理的失敗任務。
           *
           * @param  Exception  $exception
           * @return void
           */
          public function failed(Exception $exception)
          {
              // 給用戶發送失敗通知,等等...
          }
          

          如果你想要注冊一個只要當隊列任務失敗時就會被調用的事件,我們可以在 Laravel 的 app/Providers/AppServiceProvider.php文件中對這個事件附加一個回調函數即可

          /**
           * 啟動任意應用程序的服務。
           *
           * @return void
           */
          public function boot()
          {
              Queue::failing(function (JobFailed $event) {
          // $event->connectionName
          // $event->job
          // $event->exception
              });
          }
          

          六:使用Supervisor管理隊列

          一旦使用queue:work 命令,它將一直運行,直到你手動停止或者你關閉控制臺,如果你想要讓queue:work 命令永久在后臺運行,這時候可以使用進程監控工具Supervisor來實現永久在后臺運行

          1:Supervisor安裝

          Supervisor安裝可以參考文末補充內容

          2:配置Supervisor

          (1):配置supervisord.conf

          在/etc/supervisord.conf文件的最后一行增加

          files = supervisord.d/*.ini
          

          (2):隊列進程配置

          在/etc/supervisord.d/目錄下創建一個.ini文件

          [program:laravel-worker]
          process_name=%(program_name)s_%(process_num)02d
          command=php /home/forge/app.com/artisan queue:work database --sleep=3 --tries=3  #/home/forge/app.com為項目地址
          autostart=true
          autorestart=true
          user=forge
          numprocs=8 #numprocs 命令會要求 Supervisor 運行并監控 8 個 queue:work 進程
          redirect_stderr=true
          stdout_logfile=/home/forge/app.com/worker.log

          3:啟動Supervisor

          systemctl start supervisord.service
          supervisorctl update
          supervisorctl reload
          supervisorctl start laravel-worker

          補充

          Linux下使用supervisor實現進程管理

          最近在linux下寫了一個腳本需要在linux后臺一直運行,這里我使用了supervisor來實現腳本進程管理

          supervisor安裝

          1:yum安裝

          yum install supervisor
          

          2:pip安裝

          pip install supervisor
          

          supervisor常用命令

          supervisorctl status//查看所有進程的狀態
          supervisorctl stop xx       //停止指定進程(all為所有進程)
          supervisorctl start xx      //啟動指定進程(all為所有進程)
          supervisorctl restart       //重啟
          supervisorctl update//配置文件修改后使用該命令加載新的配置
          supervisorctl reload//重新啟動配置中的所有程序
          systemctl start supervisord.service     //啟動supervisor并加載默認配置文件
          systemctl enable supervisord.service    //將supervisor加入開機啟動項
          

          將指定命令加入進程管理實例

          1:supervisor配置

          supervisor配置文件:/etc/supervisord.conf

          子進程配置文件路徑:/etc/supervisord.d/ (子進程的配置文件為ini格式)

          我們增加一個命令到進程中只需要在子進程配置文件目錄下創建一個ini進程文件進行配置即可

          例:

          vim /etc/supervisord.d/test.ini

          在test.ini文件中加入如下命令:

          [program:test]     #項目進程名稱
          dircetory=/XXX     #進程目錄
          command=XXX     #進程命令
          autostart = true     #在supervisord啟動的時候是否自動啟動
          autorestart=false     #程序退出后是否自動重啟
          #日志輸出 
          stderr_logfile=/tmp/client_stderr.log
          stdout_logfile=/tmp/client_stdout.log
          user=www     #腳本運行的用戶身份 

          2:將test進程加入進程管理

          systemctl start supervisord.service
          supervisorctl update
          supervisorctl reload
          supervisorctl start test

          根據如上布置就可以實現將指定腳本加入進程管理

          以上就是Laravel實現隊列的示例代碼的詳細內容,更多關于Laravel隊列的資料請關注其它相關文章!

          標簽: PHP
          成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
          91精品国产全国免费观看 | 精品国产91九色蝌蚪| 亚洲欧美激情在线| 美国精品在线观看| 国产精品地址| 91精品国产综合久久精品麻豆| 中文字幕第一区二区| 高清国产午夜精品久久久久久| 麻豆久久久9性大片| 久久久影院官网| 国产一区二区三区免费看| 久久只有精品| 亚洲欧美日韩一区| 91一区二区三区在线观看| 欧美片网站yy| 视频一区视频二区中文字幕| 91在线视频18| 日韩一区二区三区精品视频 | 欧美色偷偷大香| 亚洲曰韩产成在线| 在线看无码的免费网站| 久久精品欧美一区二区三区麻豆| 美女国产一区二区| 色婷婷综合久久久久中文 | 亚洲精品乱码久久久久久蜜桃91| 久久这里只精品最新地址| 久久精品国产一区二区三区免费看| 国产区日韩欧美| 1区2区3区精品视频| 欧美日本亚洲韩国国产| 精品伦理精品一区| 国产精品99久久久| 欧美日韩久久不卡| 日韩黄色免费网站| 国产一区二区你懂的| 亚洲日本韩国一区| 一区在线视频| 国产精品美女久久久久久| 91毛片在线观看| 久久奇米777| 一个色在线综合| 91久久极品少妇xxxxⅹ软件| 综合在线观看色| 尤物在线精品| 欧美亚洲图片小说| 日韩电影在线一区二区三区| 久久精品日产第一区二区| 亚洲综合丝袜美腿| 国产日韩一区二区三区在线| 亚洲天堂免费看| 在线免费观看欧美| 专区另类欧美日韩| 亚洲精品无人区| 一区二区三区四区中文字幕| 亚洲无线视频| 亚洲精品视频一区| 亚洲一区三区视频在线观看| 亚洲国产婷婷综合在线精品| 亚洲精品系列| 亚洲欧洲精品一区二区三区不卡| 亚洲黄网站黄| 天堂精品中文字幕在线| 欧美日韩国产一区| 成人一区二区三区在线观看| 国产精品网站在线观看| 在线观看的日韩av| 日韩综合小视频| 欧美一级欧美三级在线观看| 欧美日韩综合精品| 婷婷夜色潮精品综合在线| 欧美日韩另类国产亚洲欧美一级| av亚洲精华国产精华| 亚洲精品中文在线| 欧美亚洲愉拍一区二区| www.色综合.com| 亚洲女与黑人做爰| 欧美三级中文字幕| 欧美激情视频一区二区三区免费| 亚洲欧美另类在线| 欧美天堂一区二区三区| 91美女精品福利| 亚洲超丰满肉感bbw| 欧美成人video| 亚洲一区二区高清视频| 国产91丝袜在线18| 亚洲一区二区三区视频在线 | 91精品国产综合久久久久久久| 国内精品久久久久久久影视麻豆 | 国产欧美亚洲一区| 久久精品国产久精国产| 久久午夜国产精品| 国产精品日韩一区二区| 国产精品亚洲成人| 亚洲精品国产第一综合99久久| 精品视频在线免费| 国产在线欧美| 久久精品国产99久久6| 亚洲国产精品99久久久久久久久| 色婷婷综合久久久久中文| 91女人视频在线观看| 亚洲影院久久精品| 久久只精品国产| 在线观看日韩电影| 亚洲区欧美区| 丁香激情综合五月| 偷拍亚洲欧洲综合| 国产精品天天摸av网| 538在线一区二区精品国产| 亚洲欧美日韩在线综合| 欧美精品一区三区在线观看| 久久超碰97中文字幕| 亚洲激情网站免费观看| 欧美成人a∨高清免费观看| 午夜在线a亚洲v天堂网2018| 成人国产精品视频| 亚洲成人免费观看| 久久精品一区蜜桃臀影院| 在线观看91视频| av不卡免费看| av在线播放成人| 男人操女人的视频在线观看欧美| 久久久精品人体av艺术| 91福利区一区二区三区| 伊人蜜桃色噜噜激情综合| 国产精品1024久久| 日韩1区2区日韩1区2区| 国产精品久久三区| 日韩欧美在线1卡| 久久最新视频| 亚洲无毛电影| 国产成人综合在线播放| 亚洲bt欧美bt精品| 亚洲欧洲综合另类在线| 久久蜜桃av一区精品变态类天堂| 欧美视频一区二| 国产精品入口| 黄色一区三区| fc2成人免费人成在线观看播放| 免费在线观看不卡| 一级日本不卡的影视| 国产精品三级久久久久三级| 欧美一区二区三区婷婷月色| 久久久亚洲人| 亚洲精品精选| 亚洲欧美综合一区| 国产高清精品在线| 亚洲高清不卡在线观看| 中文字幕在线观看不卡| 2020国产精品自拍| 日韩视频免费直播| 欧美综合视频在线观看| 国产精品亚洲欧美| 国内成人在线| 欧美日韩hd| 99久久99久久精品免费观看| 国模无码大尺度一区二区三区| 亚洲大片精品永久免费| 亚洲人成7777| 一区在线播放视频| 国产精品丝袜在线| 欧美极品美女视频| 精品国产乱码久久久久久久| 日韩一区二区三区在线观看| 欧美精品 日韩| 91高清在线观看| 久久青青草综合| 久久国产福利| 羞羞答答国产精品www一本| 国产欧美一级| 亚洲激情黄色| 亚洲黄色高清| 伊人精品成人久久综合软件| 午夜精品亚洲| 午夜视频久久久| 欧美视频福利| 国产综合色产| 欧美一区二区三区久久精品| 97se亚洲国产综合自在线不卡| 成人久久18免费网站麻豆| 成人av免费在线| 成人动漫av在线| www.欧美日韩国产在线| 99这里只有久久精品视频| 成人精品免费视频| 成人激情黄色小说| 91在线丨porny丨国产| 91蜜桃免费观看视频| 91免费观看在线| 色综合久久综合网97色综合| 91麻豆国产香蕉久久精品| 99久久综合精品| 在线观看av一区| 午夜欧美2019年伦理 | 女人色偷偷aa久久天堂| 99vv1com这只有精品| 午夜精品久久99蜜桃的功能介绍| 午夜久久黄色| 在线观看欧美亚洲| 99亚洲一区二区| 母乳一区在线观看|