YzmCMS队列:后台处理任务的强大工具

在开发Web应用程序时,我们经常遇到需要执行耗时操作的情况,例如发送电子邮件、大文件导出、生成报...

在开发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' => '创建队列表',
声明:
1、本网站名称:乐源屋 - 资源分享平台
2、本站永久网址:https://leyuanwu.com/
3、分享是一种美德,转载请保留原链接。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

予人玫瑰,手有余香

上一篇

YzmCMS v7.0 x 表单数据提交验证器

下一篇

YzmCMS x 基于新开框架纯文章系统

0条回复
因为爱过,所以慈悲;因为懂得,所以宽容
今日签到
搜索