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
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

不会的 是redis指令阻塞配置

4年前 评论
jcc123

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

4年前 评论

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

4年前 评论
jcc123

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

4年前 评论

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

4年前 评论
jcc123

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

4年前 评论

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

4年前 评论
jcc123

@LiamHao

file

同步的话

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

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

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

4年前 评论

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

4年前 评论

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