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');
        }
相关推荐
BD_Marathon18 分钟前
设计模式——依赖倒转原则
java·开发语言·设计模式
devmoon37 分钟前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
Evand J40 分钟前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
野犬寒鸦41 分钟前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
云姜.44 分钟前
java抽象类和接口
java·开发语言
xyq20241 小时前
Pandas 安装指南
开发语言
xixixin_1 小时前
【JavaScript 】从 || 到??:JavaScript 空值处理的最佳实践升级
开发语言·javascript·ecmascript
m0_736919101 小时前
C++中的委托构造函数
开发语言·c++·算法
lsx2024062 小时前
Python3 SMTP发送邮件教程
开发语言
懈尘2 小时前
从 Java 1.7 到 Java 21:逐版本深入解析新特性与平台演进
java·开发语言