✅laravel框架延时队列,有延时问题[已解决]

1. 运行环境

1). 当前使用的 Laravel 版本?

6.20.44.

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.4.27

4). 业务环境

生产环境

2. 问题描述?

A框架使用延迟3秒队列
laravel框架延时队列,有延时问题

在B框架里消费队列业务,但是他执行时间是在延迟队列需执行时间的30秒到2分钟左右。
laravel框架延时队列,有延时问题

command=/usr/local/php/bin/php /data/backend/mapi/artisan queue:work 
--queue customer_event_change 
--delay=3
--sleep=5 
--memory=128 
--timeout=60 
--tries=3

3. 您期望得到的结果?

减少延迟时间

4. 您实际得到的结果?

在B框架里消费队列业务,但是他执行时间是在延迟队列需执行时间的30秒到2分钟左右。
laravel框架延时队列,有延时问题

我排除了数据挤压,服务器时间

5. 问题溯源

经过排查找到问题,有业务同学将是queue文件的redis下block_for配置为180秒

`blockFor` 方法通常与队列任务一起使用,用于指定在任务被处理之前应该阻塞多长时间。当队列工作器(worker)尝试从队列中获取任务时,如果队列中没有任务可用,`blockFor` 方法会告诉工作器阻塞多长时间后再尝试获取任务。

6. 解决方案

为了减少业务的改动,在queue文件redis配置同级中增加配置

'redis' => [
    'driver' => 'redis',
    'connection' => 'job',
    'queue' => 'mapi',
    'retry_after' => 120,
    'block_for' => 180,
],
'job_redis' => [
    'driver' => 'redis',
    'connection' => 'job',
    'queue' => 'mapi',
    'retry_after' => 90,
    'block_for' => 10,
],

启动消费对列是时增加选择驱动配置。

php artisan queue:work job_redis --queue=customer_event_change 

高版本的框架可以尝试
php artisan queue:work --queue=customer_event_change --connection=mapi_redis

感谢大家的帮助

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 8

是不是業務本身執行時間比較長 只啟動了一個進行 下一個任務需要等待

2个月前 评论
雷雷 (楼主) 2个月前
cccdz (作者) 2个月前
cccdz (作者) 2个月前
雷雷 (楼主) 2个月前

检查下几台机器的时间设置,是否一致

php artisan tinker

now()

2个月前 评论
sanders

没懂 "A框架" "B框架" 是什么意思?消费进程的任务都是一个一个来的,前一个执行慢了就会阻塞后面的执行,所以也无法保证延迟队列“准时”执行,如果想并发执行,简单的方法就是多开几个消费进程。

2个月前 评论
雷雷 (楼主) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!