华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)

十一、计划任务与Queue队列实践:

1. 计划任务:

Linux环境下定时或者周期性的执行一些任务通常由cron这个守护进程来完成,这是一个系统自带的相对也比较方便的系统工具。

sudo apt-get install cron  // 默认自带

在这里插入图片描述

目录结构:

目录 说明
/var/spool/cron/crontabs 用户调度任务目录,是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
/etc/crontab 系统调度任务,主要负责调度各种管理和维护任务,比如写缓存数据到硬盘、日志清理等。
/etc/cron.d/ 用来存放任何要执行的crontab文件或脚本。

可以看到当配置完crontab后,就可以看到触发了发送短信的定时任务Schedule,可如下为打印出来的日志,当然,改造的代码只是做了日志的输出,并没有真实去发送短信。


2. 消息队列场景:

我们在开发应用过程中难免会遇到处理耗时任务的需求,这些任务如果直接在用户的请求中处理,必然会导致页面显示被阻塞,可以将任务交给异步队列来处理更为方便。

创建需要存储任务的数据库表。

# 使用 database 队列驱动,需要创建一个数据表来存储任务
php artisan queue:table
# 创建一个数据表来存储队列中的任务会失败
php artisan queue:failed-table
# 使用 migrate 这条命令来创建数据表
php artisan migrate

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)_第1张图片

同时,可以看到执行migrate后,会同步生成2张表,为分别jobs(记录所有消息队列的数据)、failed_jobs(记录消费失败多少次后的数据)。

生成一个新的队列任务,这里我们模拟给某个用户发送邮件功能,当用户请求统计的路由时,会产生一个队列的待消费数据,可以在jobs表中查看到,当手动queue:listen命令执行监听时,就会触发队列中的任务进行消费,模拟打印一条日志。

# 运行 make:job Artisan 命令自动创建一个新的队列任务
php artisan make:job SendEmail
# 先手动执行监听,模拟当产生数据时,就会触发队列中的任务进行消费
php artisan queue:listen --tries=3 --timeout=30

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)_第2张图片
开启监听后,得到的日志:

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)_第3张图片
华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)_第4张图片

以上,整个手动监听队列就完成了,实际上,工作的场景是在服务器上后台运行,这里需要Supervisor来进行后台监听。

apt-get install supervisor

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)_第5张图片

配置文件路径在/ /etc/supervisor/conf.d/sendMail.conf内容:

[program:laravel-queue]
process_name=%(program_name)s_%(process_num)02d
command=php /workspace/clang-quickstart/map-api/artisan queue:work --daemon --sleep=3 --tries=3       # 命令
autostart=true
autorestart=true
directory=/workspace/clang-quickstart/map-api           # 进程的当前目录
user=www-data                        # 进程运行的用户身份
numprocs=1                           # 启动多少个进程来监听Laravel队列
redirect_stderr=true

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)_第6张图片


3. 小结:

laravel中的队列服务跟其他队列服务也没有什么不同,有一个地方存放队列信息,一个PHP进程在运行时将任务写入,另外一个PHP守护进程轮询队列信息,将达到执行要求的任务执行并删除,laravel提供一个守护进程工具来查询并执行队列信息。

华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)_第7张图片

你可能感兴趣的:(服务器,数据库,运维,华为云,云计算,华为)