国产福利在 线观看视频,一区二区高清在线视频免费观看,狠狠色噜噜狠狠狠888米奇,国产一区欧美二区,国产又黄又爽的老大爷,成人久久精品二区,国内精品国产三级国产v另类,夜夜操视频 一区 二区

YZMCMS內容管理系統

首頁 > 動態

YzmCMS隊列:后臺處理任務的強大工具

來源:原創    2024-01-21 01:11:46   編輯:管理員   瀏覽:1298

在開發Web應用程序時,我們經常遇到需要執行耗時操作的情況,例如發送電子郵件、大文件導出、生成報告或進行大量數據處理。如果這些操作在用戶請求時立即執行,將會嚴重影響應用程序的性能和用戶體驗。為了解決這個問題,經過多日來的研發,YzmCMS終于開發出了 隊列 這一功能強大的工具。

隊列的基本概念

隊列是一種將任務組織成隊列以按順序處理的技術。在YzmCMS中,這些任務被表示為類,通過將任務推送到隊列中,我們可以將耗時的操作放到后臺處理,而不會阻塞用戶的請求。


YzmCMS隊列的使用方法:

一、配置隊列

要使用YzmCMS隊列,首先需保證 YzmCMS版本為V7.1及以上版本,然后配置隊列驅動類型。YzmCMS目前支持 database 和 redis 兩種驅動類型。在/common/config/config.php文件中,您可以根據需求指定要使用的隊列參數。

//隊列配置
'queue_connection'   => 'database',      //隊列驅動類型,支持 database 和 redis
'queue_name'         => 'default',       //隊列名稱

二、創建表

如果是 database 類型,則必須創建,如果是redis類型,可不創建,但也推薦創建,因為當隊列執行失敗時,YzmCMS會把執行失敗的隊列信息存入到數據庫表中,方便查看日志及再次執行。

php yzm queue table

三、創建隊列任務

每個隊列任務都是一個類。您可以使用 php yzm make job 命令生成一個新的隊列任務類。例如,要創建一個發送電子郵件的隊列任務,可以運行以下命令:

php yzm make job sendemail_job

這將在 /jobs 目錄下創建一個名為 sendemail_job.class.php 的新文件。在這個文件中,您需要在 handle 方法中定義任務的邏輯,例如:

<?php
defined('IN_YZMPHP') or exit('Access Denied'); 

class sendemail_job{

    private $params;

    public function __construct($params = []) {
        $this->params = $params;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle() {
        $email = new SampleEmail($this->params);  
        Mail::to($this->params['email'])->send($email);  
    }
}

四、啟動隊列監聽器

php yzm queue work

YzmCMS隊列:后臺處理任務的強大工具

五、將一個任務添加到隊列中

要執行隊列任務,需要將其推送到隊列中。您可以使用 dispatch 方法將任務推送到隊列中。例如:

/**
 * 下發任務
 * @param  string $job    隊列任務類名稱
 * @param  array  $params 傳入的參數,可選
 * @param  string $queue  隊列名稱,可選
 * @return string|false         任務id
 */
$res = dispatch('sendemail_job', ['email'=>'yzmcms@qq.com'], 'default');
P($res);

這將在后臺處理隊列任務,而不會阻塞您的應用程序。您可以在控制器、事件監聽器或其他適當的位置調用dispatch方法來推送任務。

六、YzmCMS隊列命令詳情

'php yzm queue work' => '啟動隊列工作',
                -queue=test,指定隊列名稱
                -sleep=5,指定連續的任務之間休眠的秒數
                -timeout=30,指定隊列任務可以運行的最大秒數
                -tries=1,指定隊列任務失敗之前可以嘗試的最大次數
                -once=1,只處理一個任務,當任務完成后,工作器將自動退出

'php yzm queue lists' => '查看隊列列表,-queue=test,查看指定隊列(可選)',
'php yzm queue restart' => '重啟隊列工作',
'php yzm queue failed' => '查看所有失敗的任務',
'php yzm queue retry' => '重試失敗任務,需指定一個任務ID(如 queue retry -id=xxxxx)',
'php yzm queue delete' => '刪除單個失敗任務,需指定一個任務ID(如 queue delete -id=xxxxx)',
'php yzm queue flush' => '刪除所有失敗任務',
'php yzm queue table' => '創建隊列表',