Laravel/Lumen 任务调度简易入门说明
前提
Laravel 中任务调度简化了服务器系统中 Cron 的操作,使得 计划任务 的实现更为简便。
这里主要以 Laravel 自带的消息队列进行说明,了解其间运行关系可以让我们更清晰的进行代码实现。
下方代码以 Lumen 9.x 框架进行举例,与 Laravel 应无二致。
中文参考文档:任务调度 - Laravel 9.x
定义任务调度
我们称之为 计划任务、周期性任务 均可。因为他的目的即是如此。
首先编辑 App\Console\Kernel 类,默认内容如下:
<?phpnamespace App\Console;use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;class Kernel extends ConsoleKernel {/*** The Artisan commands provided by your application.** @var array*/protected $commands = [];/*** Define the application's command schedule.** @param Schedule $schedule** @return void*/protected function schedule(Schedule $schedule): void {// TODO:}
}
例如我们需要在 每周一凌晨时段 执行业务统计任务(假设统计上一周订单量、销售额)
周期定义可参阅:任务调度 - 调度频率选项
在 schedule 方法中先写上如下代码:
protected function schedule(Schedule $schedule): void {$schedule->job() // 到达指定周期执行的目标任务,此处我们的目的是生产一条消息队列->withoutOverlapping() // 避免任务重复->timezone('Asia/Shanghai') // 指定时区->weeklyOn([1], '03:00'); // 定义时间:每周一 03:00 AM 执行。如果周一、周三、周六皆需要运行则可将第一参数修改为 [1, 3, 6]
}
IDE 会对 job 方法报出警告,因为我们还未添加其对应的消息队列
添加消息队列
Laravel/Lumen 框架中支持多种消息队列驱动:sqs、database、redis、beanstalkd,我们以 redis 为例。此处假设你已做好 redis 队列相关环境以及配置。
我们在 App\Jobs 中编写一个 WeeklyStatisticsJob 类:
<?phpnamespace App\Jobs;class WeeklyStatisticsJob extends Job {public function __construct() {}/*** Execute the job.** @return void*/public function handle(): void {// TODO:echo "done\n";$this->delete();}
}
如需传递自定义参数至该 Job 类,只需在 __construct 方法中添加形参相应,并传递至成员变量,例如:
<?phpnamespace App\Jobs;class WeeklyStatisticsJob extends Job {private int $supplierId;private string $beginDate;private string $endDate;public function __construct(int $supplier_id, string $begin_date, string $end_date) {$this->supplierId = $supplier_id;$this->beginDate = $begin_date;$this->endDate= $end_date;}
}
TODO: 部分为实际业务代码,例如调用服务类实现统计并存储于数据库中。
应用消息队列
回到 App\Console\Kernel 类,将消息队列类实例化进 job 方法即可:
protected function schedule(Schedule $schedule): void {$schedule->job(new WeeklyStatisticsJob(1, '2023-11-13', '2023-11-19'))->withoutOverlapping()->timezone('Asia/Shanghai')->weeklyOn([1], '03:00');
}
注意,我们为了将其与已有消息队列进行区分,应对其指定单独的队列名称。同样,如果需要单独指定消息队列的连接(使用 database、sqs 等),还需指定连接名。
所以我们应当修改为:
protected function schedule(Schedule $schedule): void {$schedule->job(new WeeklyStatisticsJob(1, '2023-11-13', '2023-11-19'),'weekly_calc_statistics', // 建议指定队列名称,如未指定,默认为 'default''redis' // 默认使用 redis 时,此处可忽略)->withoutOverlapping()->timezone('Asia/Shanghai')->weeklyOn([1], '03:00');
}
至此,我们的周期任务就已编写完成,但对于测试来说,周期过于漫长,我们可以将 每周一凌晨三点 修改为每分钟,或者每 5-10 分钟进行测试。
即,将 weeklyOn([1], '03:00') 修改为 everyMinute() 或 everyFiveMinute() 等方法。
运行测试
我们首先应当运行上方编写的队列监听:weekly_calc_statistics。
在项目根目录中执行下方命令:
# 如未指定队列名,可忽略 queue 参数
php artisan queue:work --queue=weekly_calc_statistics
随后在 另一 命令窗口中执行:
php artisan schedule:work
稍等片刻,周期任务将生产一条消息队列放入 redis 中,随后可在消息队列命令窗口中看到该队列被消费提示。
相关文章:
Laravel/Lumen 任务调度简易入门说明
前提 Laravel 中任务调度简化了服务器系统中 Cron 的操作,使得 计划任务 的实现更为简便。 这里主要以 Laravel 自带的消息队列进行说明,了解其间运行关系可以让我们更清晰的进行代码实现。 下方代码以 Lumen 9.x 框架进行举例,与 Laravel…...
目标检测 详解SSD原理,数据处理与复现
原理详解 前言 今天我们要读的这篇VGGNet(《Very Deep Convolutional Networks For Large-Scale Image Recognition》),就是在AlexNet基础上对深度对网络性能的影响做了进一步的探索。它是ImageNet 2014年亚军,相比于AlexNet&am…...
智能座舱架构与芯片- (8) 视觉篇
一、概述 相比起用于ADAS感知系统的摄像头,用于智能座舱内部的摄像头,其功能特性和性能要求相对简单。例如,OMS乘客监控摄像头,一般达到5MP即可有良好的效果。同时,OMS也可应用于车内会议系统,还应用于车内…...
uniapp、微信小程序返回上页面刷新数据
目录 前言: 方法1: 方法2: 方法3: 前言: 返回上页面刷新数据这个功能主要用于在当前页面点击跳转到另一个页面之后,在另一个页面对数据进行了操作,比如:阅读量,然后返…...
axios 请求合集
post 请求 请求负载请求参数(Request Payload) import axios from axios import qs from query-stringexport function getRoles(data){return axios.post(目标地址,data,{headers:{Content-Type: application/json,},}) }表单请求参数(Form…...
浪潮信息云峦服务器操作系统KeyarchOS体验与实践
写在前面 大家好我是网络豆,一名云计算运维人员,本文将会带大家体验一下浪潮信息服务器操作系统云峦KeyarchOS。看看浪潮信息服务器操作系统云峦KeyarchOS的优势与实践操作如何。 背景了解 KeyarchOS是浪潮信息基于Linux Kernel、OpenAnolis等开源技术…...
将 Spring 微服务与 BI 工具集成:最佳实践
软件开发领域是一个不断发展的领域,新的范式和技术不断涌现。其中,微服务架构和商业智能(BI)工具的采用是两项关键进步。随着 Spring Boot 和 Spring Cloud 在构建强大的微服务方面的普及,了解这些微服务如何与 BI 工具…...
负载均衡Ribbon和Feign的使用与区别
Ribbon 的介绍 Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡和服务调用。Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer…...
Python Opencv实践 - 二维码和条形码识别
使用pyzbar模块来识别二维码和条形码。ZBar是一个开源软件,用来从图像中读取条形码,支持多种编码,比如EAN-13/UPC-A、UPC-E、EAN-8、代码128、代码39、交错2/5以及二维码。 pyzbar是python封装ZBar的模块,我们用它来做条形码和二维码的识别。…...
树莓派的的串口通信协议
首先,回顾一下串口的核心知识点,也是面试重点: 串口通信通常使用在多机通讯中串口通信是全双工的决定串口通信的成功与否的是 数据格式 和 波特率数据格式:1. 数据位 2.停止位 3. 奇偶校验位 树莓派恢复串口 回忆前几节树莓派刷机…...
DAY60 84.柱状图中最大的矩形
84.柱状图中最大的矩形 题目要求:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路 单调栈 本地单调栈的解法和接雨水的题目是遥相呼…...
你知道Linux操作系统的前世今生吗?Linux系统又该如何搭建呢?
文章目录 前言1. Linux 是什么1.1 Unix & Linux 发展历程图1.2 Linux 的发展1.3 Linux 的发行版 2. Linux 环境搭建2.1 环境搭建方式2.2 使用云服务器 3. 使用终端软件连接到 Linux3.1 什么是终端软件3.2 下载安装 XShell3.3 使用 XShell 登陆主机 总结 前言 可能很多人都…...
674. 最长连续递增序列
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l < i < r,都有 nums[i] < nums[i 1] &a…...
DS5上ARM编译器样例工程改为GCC编译
想问一下,DS5上ARM编译器通过的样例工程,换成aarch64-none-elf-gcc工具链,是不是需要把startup.S改成gcc支持的格式呀?怎么改呢,求助大神们指点一下!谢谢!...
关于Unity Time.deltaTime的理解和使用
Unity中的Time.deltaTime是一个表示上一帧到当前帧所用时间的浮点数。 它可以让Unity应用程序能够以平滑的方式在不同的帧率下运行。 要深刻理解Time.deltaTime,首先得了解Unity引擎得工作原理。 Unity引擎以每秒帧数(FPS)的形式运行。 比…...
Vue3 配置全局 scss 变量
variables.scss $color: #0c8ce9;vite.config.ts // 全局css变量css: {preprocessorOptions: {scss: {additionalData: import "/styles/variables.scss";,},},},.vue 文件使用...
45.120.101.X 如何找出网站建设中弱点和漏洞
漏洞扫描服务(Vulnerability Scan Service)集Web漏洞扫描、操作系统漏洞扫描、资产内容合规检测、配置基线扫描、弱密码检测五大核心功能,自动发现网站或服务器在网络中的安全风险,为云上业务提供多维度的安全检测服务,…...
linux 下打印堆栈信息 jstack pstack gstack 有啥区别?分别的使用场景是啥?
jstack、pstack和gstack是在Linux系统下用于打印堆栈信息的工具,它们的使用场景和功能略有不同。 jstack:jstack是Java虚拟机自带的工具,用于打印Java进程的堆栈信息。它可以显示Java线程的状态、锁信息、线程堆栈等。jstack主要用于诊断Java…...
Vue 3实战:打造交互丰富的任务管理应用
Vue 3实战:打造交互丰富的任务管理应用 前言搭建Vue 3项目步骤 1: 安装Vue CLI 3步骤 2: 创建Vue 3项目步骤 3: 进入项目目录步骤 4: 启动项目步骤 5: 查看项目结构 组件设计与复用1. **组件的职责单一化:**2. **Props传递:**3. **插槽(Slots)…...
python之列表
列表常用操作 l [1,2,3,4,5]# 列表之切片 l1 l[:3] print(l1) # [1, 2, 3],结果为下标0到2 l2 l[3:] print(l2) # [4, 5] ,从下标3开始直到结束 l3 l[1:-1] print(l3) # [2, 3, 4] , 去头去尾...
【PAT甲级真题】- Elevator(20)
题目来源 Elevator 题目描述点击链接自行查看 注意点: 停在同一层时多等5秒 Description The highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will…...
鸿蒙NEXT开发从零到一:手把手搭建开发环境并发布第一个应用
系列文章:鸿蒙NEXT开发实战系列 -- 第1篇(共5篇) 适合人群:零基础入门,或有 Android/iOS 经验的开发者 开发环境:DevEco Studio 5.0.5 | HarmonyOS NEXT (API 14) 阅读时长:约30分钟 上一篇&…...
Palot:轻量级自动化工具,提升开发与运维效率
1. 项目概述与核心价值最近在折腾个人服务器和自动化流程时,发现了一个挺有意思的项目,叫palot。这个项目在 GitHub 上由ItsWendell维护,乍一看名字可能有点摸不着头脑,但深入了解后,你会发现它是一个非常贴合当下开发…...
别再只会用np.percentile了!手把手教你用Python实现空气质量数据(如臭氧)的百分位数计算
从零实现百分位数计算:解锁空气质量数据分析的底层逻辑 在环境监测领域,臭氧浓度的第90百分位数是评估空气质量的关键指标之一。许多数据分析师习惯性地调用np.percentile()函数,却对背后的数学原理一知半解。当遇到缺失值处理或特殊插值需求…...
安捷伦 Agilent 33522B 信号发生器
主要特性与技术指标 可为要求 苛刻的测量生成各种信号 谐波失真低 5 倍的正弦波,可生成更纯净的信号 高达 20 MHz 且抖动小 10 倍的脉冲,可提供更 的计时 逐点生成任意波形和排序能力,可以更 地显示用户定义的信号 仪器特性 160 MSa/s 采样率…...
娱乐圈天降紫微星平地起高楼,海棠山铁哥白手搭建影视新高度
海棠山铁哥,以一介素人之身,重写内娱影视规则。“真正的紫微星,从不走别人铺好的路。”一、旧世界:资本筑高墙,素人只可仰望规则结果资本奠基高楼只许巨头盖资源铺路赛道被人脉垄断老牌 IP 坐享红利新人只能蹭情怀喝汤…...
FPGA新手避坑指南:用Vivado给SRAM和DDR3做时序约束,到底差在哪?
FPGA时序约束实战:SRAM与DDR3的核心差异解析 第一次在Vivado里看到SRAM和DDR3的时序约束代码时,我盯着那些相似的set_input_delay命令发了半小时呆——它们看起来差不多,但直觉告诉我肯定有本质区别。直到在实验室熬到凌晨三点,才…...
Windows平台OpenClaw 2.6.6安装配置完整教程与避坑全攻略
OpenClaw 2.6.6 Windows 一键部署教程|10分钟搭建本地AI智能助手 OpenClaw(小龙虾)是一款可在 Windows 平台本地运行的 AI 智能操作工具,能够通过自然语言指令完成文件管理、办公自动化、浏览器操控、数据处理等各类电脑任务。 …...
开源免费的WPS AI 软件 察元AI文档助手:链路 052:wpsCapabilityRouter 中决策用 chatCompletion
链路 052:wpsCapabilityRouter 中决策用 chatCompletion 总体链路图 下图在全系列各篇保持一致,仅通过高亮样式标示本篇所覆盖的环节;箭头表示主成功路径,点线为异常或可选路径。阅读任意一篇时都应能回到本图定位,避…...
CES深度复盘:硬件创新趋势与半导体技术洞察
1. 从硬件回归到趋势洞察:一场CES展的深度复盘 又一年CES落幕,拉斯维加斯的喧嚣逐渐散去,展台上的炫目灯光熄灭,但留给行业的思考才刚刚开始。每年一月的这场科技盛会,早已超越了单纯的新品发布会范畴,它更…...
