最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年12月27日 10:13:32   作者:Stephen  
Laravel隊(duì)列服務(wù)為各種不同的后臺隊(duì)列提供統(tǒng)一的API,下面這篇文章主要給大家介紹了關(guān)于Laravel中使用Queue的最基本操作教程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。

前言

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

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

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

和我一樣入門 Laravel 的隊(duì)列有些困難的同學(xué)可以交流一下。

配置

添加 Redis 包

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

database.php

在 database.php 配置文件中對 redis 數(shù)據(jù)庫部分進(jìn)行配置,默認(rèn)有一個(gè) default 連接,就用這個(gè)好了:)

根據(jù)這個(gè)默認(rèn)連接中需要的配置項(xiàng),編輯 .env 配置文件,將其中的 REDIS_HOST、REDIS_PASSWORD、REDIS_PORT 填寫成自己服務(wù)器中 Redis 的相應(yīng)值。

queue.php

首先需要去 .env 中配置 QUEUE_DRIVER,因?yàn)楝F(xiàn)在打算用 Redis,所以配置成 redis。

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

任務(wù)類

接下來就是寫實(shí)際的操作類了,Laravel 提供了 artisan 命令簡化創(chuàng)建任務(wù)類:

php artisan make:job Demo

在 app 目錄下會生成 Jobs 目錄,里面已經(jīng)有了 Demo.php 任務(wù)類。

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

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

發(fā)放任務(wù)

現(xiàn)在寫個(gè)入口函數(shù),推送任務(wù)到隊(duì)列中。使用輔助函數(shù) dispatch():

Laravel 中使用如下方式:

Demo::dispatch();

Lumen 中使用如下方式:

dispatch(new Demo);

開啟隊(duì)列

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

php artisan queue:listen --queue=default

它會監(jiān)聽隊(duì)列,并輸出簡單的執(zhí)行情況,比如:

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

沒啥問題后就可以讓這個(gè)隊(duì)列腳本執(zhí)行在后臺:

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

進(jìn)階一下 :)

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

參數(shù)傳遞

傳入

在入口函數(shù)中傳入?yún)?shù)方式如下:

Laravel 中使用如下方式:

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

Lumen 中使用如下方式:

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

接收

在任務(wù)類中接收參數(shù)方式如下:

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);
}

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

多隊(duì)列

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

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

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

不對啊,我好像沒有定義過這個(gè)叫 emails 的 queue。嗯,自然需要做出一點(diǎn)改動(dòng),在 queue.php 配置文件中的 redis 配置 queue 從 default 改為 {default},這樣做的效果就是隊(duì)列的名稱可以從運(yùn)行的時(shí)候動(dòng)態(tài)拿到,而不是寫死的。

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

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

那么現(xiàn)在就很清楚了,我們的 Job 類使用了 Illuminate\Bus\Queueable 這個(gè) trait,所以需要在 Job 類上調(diào)用這個(gè) onQueue() 方法。

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

當(dāng)我們在開啟隊(duì)列的時(shí)候:

php artisan queue:work --queue=emails

這里指定的隊(duì)列名 emails 和 dispatch 時(shí)指定的隊(duì)列名保持一致即可。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考鏈接

Laravel 官方文檔

相關(guān)文章

  • php防止表單重復(fù)提交實(shí)例講解

    php防止表單重復(fù)提交實(shí)例講解

    在本文中我們給大家整理了關(guān)于php防止表單重復(fù)提交的知識點(diǎn),有需要的朋友們跟著學(xué)習(xí)參考下。
    2019-02-02
  • 微信公眾號OAuth2.0網(wǎng)頁授權(quán)問題淺析

    微信公眾號OAuth2.0網(wǎng)頁授權(quán)問題淺析

    根據(jù)需求,我今天完成的是微信的網(wǎng)頁授權(quán)然后拉取用戶的一些基本信息的問題。具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧
    2017-01-01
  • 學(xué)習(xí)PHP Cookie處理函數(shù)

    學(xué)習(xí)PHP Cookie處理函數(shù)

    這篇文章主要為大家詳細(xì)介紹了PHP Cookie處理函數(shù)的使用方法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • php中字符串和正則表達(dá)式詳解

    php中字符串和正則表達(dá)式詳解

    這篇文章主要介紹了php中字符串和正則表達(dá)式詳解,需要的朋友可以參考下
    2014-10-10
  • PHP實(shí)現(xiàn)的多彩標(biāo)簽效果代碼分享

    PHP實(shí)現(xiàn)的多彩標(biāo)簽效果代碼分享

    這篇文章主要介紹了PHP實(shí)現(xiàn)的多彩標(biāo)簽效果代碼分享,經(jīng)常可以看到一些博客中的標(biāo)簽(TAGS)頁面是彩色的效果展現(xiàn),本文就給出了實(shí)現(xiàn)這個(gè)功能的PHP代碼,需要的朋友可以參考下
    2014-08-08
  • thinkphp6如何使用中間件記錄行為日志

    thinkphp6如何使用中間件記錄行為日志

    這篇文章主要介紹了thinkphp6如何使用中間件記錄行為日志問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Laravel多域名下字段驗(yàn)證的方法

    Laravel多域名下字段驗(yàn)證的方法

    這篇文章主要給大家介紹了關(guān)于Laravel多域名下字段驗(yàn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • PHP在線書簽系統(tǒng)分享

    PHP在線書簽系統(tǒng)分享

    這篇文章主要為大家介紹了PHP在線書簽系統(tǒng),分析系統(tǒng)需求、提出解決方案,建立數(shù)據(jù)庫,實(shí)現(xiàn)基本網(wǎng)站的框架,需要的朋友可以參考下
    2016-01-01
  • PHP中使用extract函數(shù)

    PHP中使用extract函數(shù)

    這篇文章主要介紹了PHP中使用extract函數(shù),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • PDO操作MySQL的基礎(chǔ)教程(推薦)

    PDO操作MySQL的基礎(chǔ)教程(推薦)

    下面小編就為大家?guī)硪黄狿DO操作MySQL的基礎(chǔ)教程(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

栾城县| 连平县| 南乐县| 彭山县| 汕尾市| 青冈县| 宣武区| 吉木乃县| 邯郸县| 沽源县| 稷山县| 华蓥市| 沙河市| 厦门市| 师宗县| 象山县| 沈丘县| 聂荣县| 宁远县| 神木县| 万全县| 明水县| 会同县| 合阳县| 祥云县| 高台县| 安溪县| 武宁县| 万年县| 安义县| 威海市| 蒙山县| 库尔勒市| 隆尧县| 额济纳旗| 金寨县| 房山区| 东兴市| 辉南县| 八宿县| 南康市|