使用队列的原因:因为项目需要每天定时拉取多个 api 的数据,数据量大(每次上万个任务),所以选择使用队列拉取。
工具:laravel 队列,supervisor 进程监控
遇到的问题:队列在运行过程中会突然卡住不再运行,需要重启 horizon 和 supervisorctl,才会继续运行。
(2020-01-03 15:31:00 补充)难点:手动运行正常!重启队列并观察,也正常!运行一段时间,队列卡住,只有重启才能运行
疑问:
一开始想着是否是自己的程序有问题,但是手动使用 php artisan 运行 command 来检测任务的时候,每次在 horizon 面板都是看着正常运行。而且每次宕机之后,去看 horizon 面板都是发现任务累积了很多,所以也不存在是因为队列没有任务,导致 work 挂掉(而且已使用 Supervisor 进行监控)。
是否是说:laravel 队列长时间运行之后,必须重启?因为有时候一两天内都是正常的,过几天突然就卡了。
关于日志:在 horizon 日志中:没有异常报错,比如一直 processing 循环这种,中断任务时候都是前面正常运行,后面突然就停止了(日志就中断了)。在 failed_job 中,报错基本都是 job 运行的次数过多或者时间过长
目前已采用的解决方案:
1、将任务分割为多个队列进程,第一为了不让某些任务影响到后续任务,第二方便定位问题并且重新手动运行任务,第三,不知是否是单一队