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');
        }
相关推荐
BHXDML3 分钟前
Java 设计模式详解
java·开发语言·设计模式
CCPC不拿奖不改名7 分钟前
数据处理与分析:pandas基础+面试习题
开发语言·数据结构·python·面试·职场和发展·pandas
余瑜鱼鱼鱼10 分钟前
Java数据结构:从入门到精通(十三)
java·开发语言
wzfj1234511 分钟前
FreeRTOS xTaskCreateStatic 详解
开发语言·c#
运维行者_19 分钟前
远程办公场景 NFA:从网络嗅探与局域网流量监控软件排查团队网络卡顿问题
运维·服务器·开发语言·网络·自动化·php
txinyu的博客22 分钟前
C++ 智能指针 (shared_ptr/weak_ptr) 全解析
开发语言·c++
没有bug.的程序员25 分钟前
Java内存模型(JMM)深度解析:从 volatile 到 happens-before 的底层机制
java·开发语言·并发编程·volatile·内存模型·jmm·happens-before
寻星探路33 分钟前
【算法进阶】滑动窗口与前缀和:从“和为 K”到“最小覆盖子串”的极限挑战
java·开发语言·c++·人工智能·python·算法·ai
嘿嘿潶黑黑36 分钟前
Qt中的Q_PROPERTY宏
开发语言·qt
一个帅气昵称啊38 分钟前
C# 14 中的新增功能
开发语言·c#