我使用的是Laravel 5.6,我将作业调度到一个队列,然后使用supervisor激活该队列上的8个工人。我本以为Laravel会知道不要做两次同样的工作,但我惊讶地发现它做到了。同一份工作由不止一名工人负责,因此奇怪的事情开始发生。
问题是,一年前,我为另一个Laravel项目写了同样的机制(但在Laravel 5.1版本上(,整个事情都是开箱即用的。我不需要配置任何东西。
有人能帮忙吗?非常感谢。
我遇到了完全相同的问题,这让我抓狂,直到我设法解决了它!
出于某种原因,Laravel 5.6创建了engine=MyISAM的"jobs"表,该表不支持用于防止作业运行两次的锁定机制所必需的事务。我相信Laravel 5.1中的情况有所不同,因为我也曾用Laravel 5.4编写过一个应用程序,它可以完美地与8名员工合作。当我对Laravel 5.6做同样的事情时,它没有起作用。和你描述的一样。
一旦我将引擎更改为支持事务的InnoDB,一切都按预期进行,锁定机制也开始工作。
所以基本上你需要做的就是:
ALTER TABLE jobs ENGINE = InnoDB;
希望这能解决你的痛苦。。。
$schedule->命令('emails:send'(->withoutOverlapping((;