pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

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

Laravel隊列服務為各種不同的后臺隊列提供統一的API,下面這篇文章主要給大家介紹了關于Laravel中使用Queue的最基本操作教程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借

前言

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 時指定的隊列名保持一致即可。

總結

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

參考鏈接

Laravel 官方文檔

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Gravatar是一圖像跟隨著您到訪過的網站,當您在博客中留言或發表文章,它將會出現在您的名稱旁。下面這篇文章主要給大家介紹了關于利用Laravel如何生成 Gravatar 頭像地址的優雅方法,
本篇文章主要介紹了PHP 的Opcache加速的使用方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了關于 Laravel Redis 多個進程同時取隊列問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
laravel 的隊列服務對各種不同的后臺隊列服務提供了統一的 API,下面這篇文章通過源碼分析給大家介紹了關于 Laravel 重復執行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要介紹了Thinkphp5行為使用方法匯總,需要的朋友可以參考下
最近在使用laravel5.5,利用其實現了一個功能,下面分享給大家,這篇文章主要給大家介紹了關于Laravel 5.5基于內置的Auth模塊如何實現前后臺登陸的相關資料,文中通過示例代碼介紹的非
主站蜘蛛池模板: 管形母线,全绝缘铜管母线厂家-山东佰特电气科技有限公司 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 电磁铁_小型推拉电磁铁_电磁阀厂家-深圳市宗泰电机有限公司 | 压滤机滤板_厢式_隔膜_板框压滤机滤板厂家价格型号材质-大凯环保 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 美侍宠物-专注宠物狗及宠物猫训练|喂养|医疗|繁育|品种|价格 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 手持式3d激光扫描仪-便携式三维立体扫描仪-北京福禄克斯 | OpenI 启智 新一代人工智能开源开放平台| 深圳成考网-深圳成人高考报名网| 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 造价工程师网,考试时间查询,报名入口信息-网站首页 | 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 农业四情_农业气象站_田间小型气象站_智慧农业气象站-山东风途物联网 | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 挨踢网-大家的导航!| 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 |