Laravel學習三:laravel隊列使用教程

來源:互聯網
上載者:User
概述

隊列概念:略,不知道的自行解決。(PS:此處laravel version:5.1)
在app服務端開發中,常常會遇到此種情況:

某一個大的任務中,可以分割為1,2,3,4個小任務,其中2的完成依賴1,4的完成依賴2。那麼1、2、4可以理解為一個事務,必須依次執行,否則任務無法完成。但是任務3,與1、2、4沒有關係,可以單獨完成,誰先誰後也沒有影響。具體說以下任務就跟三是一個屬性:訊息推送,郵件發送等等。

訊息佇列的理解

對於這塊,是屬於典型的生產者/消費者模型。一個生產者程式製造任務,放進隊列裡,然後消費者程式去檢查隊列,發現了任務,就消費它。理論上理解通透了。來看看實際操作。

laravel實現的訊息佇列

官方文檔:laravel的隊列

1. 實現生產者

通過訊息佇列的模型,我們知道應該有一個生產者,那麼在laravel中,該如何去構造這個生產者呢?很簡單。

php artisan make:command PushMessage ?queued

執行完後,可以在app目錄下看到 app\Commands\PushMessage.php ,開啟這個檔案,會看到它整合了一個 Command 這個類,但是呢,我們這裡並沒有這個類(如果你用的是5.0版本,那麼它是存在的,5.1就沒有啦)。不要緊張,自己在建立一個 app\Commands\Command.php 代碼內容如下:

   

OK!,然後再次回到 app\Commands\PushMessage.php 這個檔案,其中有一個方法 handle ,我們這裡為了示範,就使用寫檔案的操作來進行啦。在其中寫入以下內容

file_put_contents('D:/webApp/test.txt', 'hello world!');

到這裡,生產者就寫完了,找個控制器。將這個生產者產生的內容推進隊列裡邊吧。我這裡示範,是自己在 app\Http\Controllers\TestController.php 中進行的調用。還是貼以下源碼吧:

   

這裡有兩個點,需要注意:
① 這裡我們使用的是Queue Facade,但是官方建議使用Bus Facade.兩者效果一樣,你自己權衡。
② 這裡我為了查看效果,特意加了一個60s後,執行隊列中的任務。

2. 隊列資料表儲存的地方

光生產出來不行的,還得有個地方把這些生產的產品儲存起來。這裡為了簡單,我就使用資料庫的方式吧。其他方式大家可以自己試試,都很容易。使用資料庫,需要進行以下配置:

  • 開啟 config/queue.php,更改預設隊列驅動為資料庫:

    default’ => env(‘QUEUE_DRIVER’, ‘database’)

  • 配置好,你的資料庫連接服務。這個就不說了。通過config/app.php 來配置

  • 執行以下兩條命令:

    php artisan queue:table
    php artisan migrate

  • 命令的含義,就是在資料庫中建立一個隊列表,用來儲存任務。
    好的,儲存任務的列表頁搞好了。接下來就是要進行消費了。這就很簡單啦。

    3. 隊列的消費者

    這個消費者的概念,對應上官方文檔就是 動隊列監聽服務 ,當它監聽到有要執行的任務時,就會自動按照指定條件執行。

    php artisan queue:listen

    測試的佇列服務

    現在是來檢驗成果的時候了。以我本地環境為例。首先運行程式,產生幾個任務:
    在瀏覽器中開啟:http://127.0.0.1/laravel/public/index.php
    這個時候開啟資料庫,可看到如下內容:

    然後觀察運行監聽程式的dos,當看到以下樣子時,表示程式已經執行完畢:

    這個時候,你去對應的目錄,就會看到:test.txt 這個檔案了。
    好了,想要瞭解更深入,請參考官方文檔吧。改變準備寫下laravel的Facade,這個讓我理解了很久才理解的概念。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.