亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

Laravel中使用Queue的最基本操作教程

2024-05-05 00:01:38
字體:
來源:轉載
供稿:網友

前言

laravel中的隊列服務跟其他隊列服務也沒有什么不同,都是最符合人類思維的最簡單最普遍的流程:有一個地方存放隊列信息,一個PHP進程在運行時將任務寫入,另外一個PHP守護進程輪詢隊列信息,將達到執行要求的任務執行并刪除。由于PHP是url驅動的同步語言,本身是阻塞的,所以laravel提供一個守護進程工具來查詢并執行隊列信息也就不足為奇了。

這兩天初次接觸 Laravel 的隊列,也是搞了好一會。。。一番折騰下來還是感慨對 Laravel 不得其門,文檔寫的相對簡單和概括,看源碼又有些力不從心(不過看源碼慢慢調試驗證還是最可靠的)。

下面是我的一個簡單 Demo,僅僅使用了隊列的最基本操作,偏高級的操作需要再去好好時間一番 :)

和我一樣入門 Laravel 的隊列有些困難的同學可以交流一下。

配置

添加 Redis 包

在 composer.json 中 require 部分加入 "predis/predis": "~1.0",,然后 composer up 更新一下即可。

database.php

在 database.php 配置文件中對 redis 數據庫部分進行配置,默認有一個 default 連接,就用這個好了:)

根據這個默認連接中需要的配置項,編輯 .env 配置文件,將其中的 REDIS_HOST、REDIS_PASSWORD、REDIS_PORT 填寫成自己服務器中 Redis 的相應值。

queue.php

首先需要去 .env 中配置 QUEUE_DRIVER,因為現在打算用 Redis,所以配置成 redis。

接著配置 queue.php 里 connections 部分的 redis 連接,其中 connection 對應的值就是 database.php 中 redis 的那個 default 連接。

任務類

接下來就是寫實際的操作類了,Laravel 提供了 artisan 命令簡化創建任務類:

php artisan make:job Demo

在 app 目錄下會生成 Jobs 目錄,里面已經有了 Demo.php 任務類。

Lumen 可沒有這個 artisan 命令,不過也很方便,默認會有一個 ExampleJob.php 已經寫好了,拷貝一份改個名字即可。
先寫個簡單的日志輸出測試一下好了,在 handle 方法中:

Log::info('Hello, queue');

發放任務

現在寫個入口函數,推送任務到隊列中。使用輔助函數 dispatch():

Laravel 中使用如下方式:

Demo::dispatch();

Lumen 中使用如下方式:

dispatch(new Demo);

開啟隊列

順利的話,這是最后一步了。命令行中執行:

php artisan queue:listen --queue=default

它會監聽隊列,并輸出簡單的執行情況,比如:

[2017-11-07 02:12:47] Processing: App/Jobs/Demo[2017-11-07 02:12:47] Processed: App/Jobs/Demo

沒啥問題后就可以讓這個隊列腳本執行在后臺:

php artisan queue:work --daemon --quiet --queue=default 1>> /dev/null 2>&1

進階一下 :)

推送到隊列中時,一般會有傳參的需求,那這里怎么傳呢?

參數傳遞

傳入

在入口函數中傳入參數方式如下:

Laravel 中使用如下方式:

$param = 'Stephen';Demo::dispatch($param);

Lumen 中使用如下方式:

$param = 'Stephen';dispatch(new Demo($param));

接收

在任務類中接收參數方式如下:

protected $param;/** * Create a new job instance. * * @return void */public function __construct($param){  $this->param = $param;}/** * Execute the job. * * @return void */public function handle(){  Log::info('Hello, ' . $this->param);}

初次嘗試到此為止,還有許多高級用法,比如延遲分發、錯誤處理、優先級、失敗處理等,后續會繼續寫 :)

多隊列

這是一個必然需要考慮到的問題,我不可能將所有任務都放在一個叫 default 的隊列中,這樣不容易對隊列進行管理。

要指定不同的隊列,非常簡單,在 dispatch() 后緊接著跟上 onQueue() 方法即可:

Demo::dispatch()->onQueue('emails');

不對啊,我好像沒有定義過這個叫 emails 的 queue。嗯,自然需要做出一點改動,在 queue.php 配置文件中的 redis 配置 queue 從 default 改為 {default},這樣做的效果就是隊列的名稱可以從運行的時候動態拿到,而不是寫死的。

如果使用 Lumen 框架,那么直接這么寫會報錯:Call to a member function onQueue() on string。

原因在于 Lumen 的 Job 基類中并沒有使用 Illuminate/Foundation/Bus/Dispatchable 這個 trait,而是直接使用 Illuminate/Bus/Queueable 中的 onQueue() 方法。

那么現在就很清楚了,我們的 Job 類使用了 Illuminate/Bus/Queueable 這個 trait,所以需要在 Job 類上調用這個 onQueue() 方法。

$job = new XXXJob();dispatch($job->onQueue('queue-name'));

當我們在開啟隊列的時候:

php artisan queue:work --queue=emails

這里指定的隊列名 emails 和 dispatch 時指定的隊列名保持一致即可。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。

參考鏈接

Laravel 官方文檔


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久成人精品一区二区三区| 国产成人精品久久二区二区91| 日本亚洲欧洲色| 亚洲精品在线看| 欧美激情性做爰免费视频| 久久香蕉精品香蕉| 国产又爽又黄的激情精品视频| 欧美激情视频给我| 亚洲国产另类久久精品| 国产精品女主播视频| 草民午夜欧美限制a级福利片| 中文字幕精品在线| 一区二区三区高清国产| 亚洲第一福利视频| 国产黑人绿帽在线第一区| 在线亚洲男人天堂| 亚洲精品国产suv| 国产精品自产拍高潮在线观看| 狠狠躁天天躁日日躁欧美| 亚洲国产日韩一区| 日韩经典第一页| 国产成人拍精品视频午夜网站| 久久久久久久97| 国产黑人绿帽在线第一区| 国产精品1区2区在线观看| 国产精品久久久久91| 日韩免费观看视频| 日韩国产欧美精品在线| 欧美专区中文字幕| 日韩高清中文字幕| 亚洲综合日韩在线| 成人中文字幕在线观看| 亚洲白拍色综合图区| 欧美亚洲国产精品| 色综合老司机第九色激情| 在线成人免费网站| 96精品久久久久中文字幕| 亚洲精品国产精品国自产在线| 欧美电影在线观看高清| 欧美丰满少妇xxxxx| 555www成人网| 九九视频这里只有精品| 国产成人精彩在线视频九色| 久久99国产精品自在自在app| 国产精品国产福利国产秒拍| 日韩中文字幕不卡视频| 国产mv久久久| 久久香蕉精品香蕉| 久久精品亚洲精品| 久久久久国产精品www| 日本久久久久久久久| 亚洲国产欧美一区二区三区同亚洲| 性欧美视频videos6一9| 亚洲欧洲日本专区| 视频在线观看一区二区| 亚洲高清一二三区| 亚洲日本成人女熟在线观看| 国产精品av网站| 国产精品mp4| 久久综合五月天| 亚洲国产天堂久久综合| 国产这里只有精品| 欧美在线精品免播放器视频| 91av在线免费观看| 欧美亚洲国产日本| 欧美xxxwww| 欧美成人合集magnet| 91亚洲国产精品| 国产精品激情av在线播放| 亚洲va欧美va在线观看| 91夜夜揉人人捏人人添红杏| 国产亚洲欧洲高清| 97在线看免费观看视频在线观看| 日韩在线视频国产| 性欧美视频videos6一9| 欧美另类暴力丝袜| 国产亚洲精品美女久久久久| 51色欧美片视频在线观看| 国产有码在线一区二区视频| 精品一区二区三区四区在线| 伊人伊成久久人综合网站| 日韩欧美在线看| 91亚洲精品视频| 日本一区二区三区四区视频| 97国产精品人人爽人人做| 国产精品久久一| 久久久日本电影| 日韩精品视频三区| 国产精品jvid在线观看蜜臀| 国产精品99久久久久久久久久久久| 九九久久久久99精品| 国产中文字幕亚洲| 欧美精品九九久久| 精品久久久久久久中文字幕| 日韩精品视频在线免费观看| 国产日本欧美一区| 亚洲精品自拍偷拍| 欧美成人中文字幕| 蜜臀久久99精品久久久久久宅男| 国产91精品久久久久久| 亚洲天堂免费观看| 欧美中文字幕在线| 国产亚洲精品一区二区| 91视频国产高清| 国产精品一区二区久久精品| 日韩激情视频在线播放| 在线视频国产日韩| 亚洲精品短视频| 中文字幕欧美视频在线| 国产美女精品视频| 久久精品国产久精国产一老狼| 欧美极品在线视频| 久久人人爽人人爽人人片av高请| 国产国语刺激对白av不卡| 亚洲视频在线免费观看| 欧美黄色免费网站| 中文字幕亚洲欧美日韩2019| 久久av在线看| 日本一区二三区好的精华液| 国产精品自产拍在线观| 久久综合九色九九| 亚洲美女激情视频| 97碰在线观看| 久久精品视频一| 91av在线看| 亚洲人成电影网站色…| 国产精品极品美女粉嫩高清在线| 国产一区二区三区三区在线观看| 亚洲国产精品网站| 俺也去精品视频在线观看| 亚洲精品永久免费精品| 欧美激情综合色综合啪啪五月| 国产精品视频最多的网站| 欧美激情网友自拍| 日本精品一区二区三区在线播放视频| 国产免费亚洲高清| 亚洲国产天堂久久综合| 国产精品一区久久| 亚洲毛片在线观看.| 国产女同一区二区| 亚洲精品电影在线| 亚洲一级黄色片| 亚洲人成自拍网站| 在线亚洲国产精品网| 大荫蒂欧美视频另类xxxx| 色爱精品视频一区| 国产精品wwww| 亚洲国产成人精品女人久久久| 日本韩国欧美精品大片卡二| 国产精品wwwwww| 日韩精品免费视频| 国产成人精品免费视频| 亚洲成人黄色在线观看| 国产精品第三页| 久久色精品视频| 成人国产精品色哟哟| 欧美精品免费播放| 国产午夜精品一区理论片飘花| 亚洲精品电影网| 国产精品一区二区三区在线播放| 国产一区二区三区在线| 国产精品久久不能| 久久久久成人精品| 欧美大片大片在线播放|