PHP判处重复延长队列执行时间

需求是这样:

14:00的时候,需要给1000个门店执行发券操作,有的门店需要发3个场景,开放平台的接口有请求频次限制,他是按照门店的场景发券需要间隔10秒。比如说,AB两个门店同时发a券,但不能 A门店同时发a、b券。

php 复制代码
$delay = 10; // 设置固定的间隔时间为10秒

        $previousExecutionTimes = []; // 用于记录每个s_id的上一个任务执行时间

        foreach ($data as $v) {

            $jobData = [
                's_id'    => $v['s_id'],
                'labelId' => $v['labelId']
            ];

            $s_id = $v['s_id'];
            // 检查之前是否有相同s_id的任务,如果有,就取其上一个执行时间,否则默认为当前时间
            $previousExecutionTime = isset($previousExecutionTimes[$s_id]) ? $previousExecutionTimes[$s_id] : time();

            $currentExecutionTime = time();
            $currentDelay = max($delay, $previousExecutionTime + $delay - $currentExecutionTime); // 计算当前任务的延迟时间,保证相同s_id的任务间隔为10秒
            $previousExecutionTimes[$s_id] = $currentExecutionTime + $currentDelay; // 更新当前s_id的上一个任务执行时间

            dump("time:{$currentDelay},s_id:{$s_id}");

            Queue::later($currentDelay, 'QueryValueadded@taskSubmit', $jobData, 'test');
        }
相关推荐
csbysj20204 分钟前
Lua 函数
开发语言
头发还在的女程序员5 分钟前
三天搞定招聘系统!附完整源码
开发语言·python
温轻舟10 分钟前
Python自动办公工具06-设置Word文档中表格的格式
开发语言·python·word·自动化工具·温轻舟
p***c94911 分钟前
PHP在电商中的电商系统
开发语言·php
Z***258018 分钟前
JavaScript在Node.js中的Deno
开发语言·javascript·node.js
阿星智力囊1 小时前
Thinkphp6+nginx环境报错信息不显示,接口直接报500和CORS跨域(错误的引导方向),真坑啊
运维·nginx·php·thinkphp6
a***56061 小时前
Windows上安装Go并配置环境变量(图文步骤)
开发语言·windows·golang
San30.1 小时前
ES6+ 新特性解析:让 JavaScript 开发更优雅高效
开发语言·javascript·es6
烤麻辣烫1 小时前
黑马程序员苍穹外卖(新手)DAY6
java·开发语言·学习·spring·intellij-idea
友友马2 小时前
『QT』窗口 (一)
开发语言·数据库·qt