我使用 Laravel 5.6,将作业分派到队列,然后使用主管激活该队列上的 8 个工作线程。我原以为 Laravel 会知道不要运行同一个工作两次,但我惊讶地发现它确实如此。
同样的工作由不止一名工人负责,因此奇怪的事情开始发生。
问题是,一年前,我为另一个 Laravel 项目(但在 Laravel 版本 5.1 上)编写了相同的机制,整个过程开箱即用。我不需要配置任何东西。
有人可以帮忙吗?
谢谢。
我遇到了完全相同的问题,这让我发疯,直到我设法解决它!
由于某种原因,Laravel 5.6 使用 engine=MyISAM 创建“作业”表,该表不支持事务,而事务是防止作业运行两次的锁定机制所必需的。我相信 Laravel 5.1 中的情况有所不同,因为我也曾经使用 Laravel 5.4 编写过一个应用程序,并且它与 8 个工作人员一起完美运行。当我用 Laravel 5.6 做同样的事情时,它不起作用。和你描述的一样。
一旦我将引擎更改为支持事务的 InnoDB,一切都会按预期工作,并且锁定机制开始工作。
所以基本上你需要做的就是:
ALTER TABLE jobs ENGINE = InnoDB;
希望能解决你的痛苦...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)