Laravel horizon 每次执行队列后,都会挂起一分钟,然后在执行下一个队列?

配置

 'supervisor-mongo-1' => [
                'connection' => 'redis',
                'queue' => ['xxxx'],
                'balance' => false,
                'processes' => 1,
                'tries' => 1,
                'timeout' => 900,

]

Laravel horizon 每次执行后队列后,都会挂起一分钟,然后在执行下一个队列?

刚开始不是间隔1分钟,之后每次执行完,都会挂起一分钟。

不知道有遇到这个类似问题的?

Make everything simple instead of making difficulties as simple as possible
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

不会的 是redis指令阻塞配置

3年前 评论
jcc123

@arvin-hermit 为什么刚开始阻塞了10几秒,后来阻塞了一分钟,这不太符合逻辑

3年前 评论

Horizon中只有这一个队列嘛,如果有多个,可能是一个消费进程忙不过来,你可以多开几个消费进程试试,就是把process调大一些

3年前 评论
jcc123

@LiamHao 单进程消费,多的话对业务逻辑有影响。一个队列消费完后,这个进程应该是空闲的,不会出现忙不过来的情况。

3年前 评论

@jcc123 我说的关键是有多个待消费的【队列】。比如你的系统有ordermailxxxx三个待消费的队列,那么,如果你只允许开一个【消费进程】进行消费的话,而且你设置了三个队列有优先级,order最高,xxxx最低,那么xxxx就会出现等待的情况。这唯一的一个【消费进程】需要先消费完ordermail队列中的任务,才会执行xxxx中的任务。我在想,是不是这1分钟里,【消费进程】去处理别的队列了。

3年前 评论
jcc123

@LiamHao 应该不是,这个进程里只监听一个队列。

3年前 评论

@jcc123 那就是xxxx队列里的\App\Jobs\OrderSyncToMongo任务,代码执行效率低。低到处理完一个任务需要1分钟时间。仔细看你的任务时间间隔,后面也有几秒就处理完的任务,所以,据我猜测,应该是任务里的代码执行时间问题,有的任务处理时间长,有的任务处理时间短。你可以在开发环境,修改.env文件中的QUEUE_CONNECTION参数,改为sync,使用同步的方式,再观察几分钟任务的执行时间差异。而且你在config/horizon.php中设置了timeout=900,说名你的任务的确很耗时,否则一般不需要设置这个参数的。

3年前 评论
jcc123

@LiamHao

file

同步的话

每次执行用了11秒左右的时间

与上方的队列执行时间差不大多

所以我怀疑是,horizon 有某种不稳定的问题,但又没办法证明它

3年前 评论

@jcc123 嗯,我也看错了,确实是规律性的,任务耗时15秒左右,还是很稳定的。每个任务之间,又会出现45秒左右的等待。坐等大佬了:wa

3年前 评论

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