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

华为云云耀云服务器L实例评测|企业项目最佳实践系列:

华为云云耀云服务器L实例评测|企业项目最佳实践之云服务器介绍(一)
华为云云耀云服务器L实例评测|企业项目最佳实践之华为云介绍(二)
华为云云耀云服务器L实例评测|企业项目最佳实践之华为云耀云服务器L实例介绍(三)
华为云云耀云服务器L实例评测|企业项目最佳实践之云耀云服务器L实例购买 (四)
华为云云耀云服务器L实例评测|企业项目最佳实践之评测用例(五)
华为云云耀云服务器L实例评测|企业项目最佳实践之包管理工具安装软件(六)
华为云云耀云服务器L实例评测|企业项目最佳实践之docker部署及应用(七)
华为云云耀云服务器L实例评测|企业项目最佳实践之私有库搭建verdaccio(八)
华为云云耀云服务器L实例评测|企业项目最佳实践之启动宠物预约项目(九)
华为云云耀云服务器L实例评测|企业项目最佳实践之计划任务与Queue队列实践 (十)
华为云云耀云服务器L实例评测|企业项目最佳实践之压测 (十一)
华为云云耀云服务器L实例评测|企业项目最佳实践之建议与总结(十二)


十一、计划任务与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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
开启监听后,得到的日志:

在这里插入图片描述
在这里插入图片描述

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

apt-get install supervisor

在这里插入图片描述

配置文件路径在/ /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

在这里插入图片描述


3. 小结:

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值