Laravel多名工人两次工作

时间:2018-07-19 14:33:15

标签: laravel queue jobs worker

我正在使用Laravel 5.6,并且正在将作业分派到一个队列,然后使用主管激活该队列上的8个工作程序。我原以为Laravel知道不会两次执行相同的工作,但是我很惊讶地发现确实如此。 这项工作由多名工人负责,因此奇怪的事情开始发生。

问题是,一年前,我为另一个Laravel项目(但在Laravel 5.1版上)编写了相同的机制,并且整个过程开箱即用。我不必进行任何配置。

任何人都可以帮忙吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,这使我发疯,直到我设法解决它!

出于某种原因,Laravel 5.6使用engine = MyISAM创建了“ jobs”表,该表不支持事务,而事务对于锁定机制是必需的,该锁定机制可防止作业运行两次。我相信在Laravel 5.1中会有所不同,因为我也曾经使用Laravel 5.4编写过一个应用程序,并且可以与8位工作人员完美协作。当我使用Laravel 5.6做同样的事情时,它不起作用。与您描述的相同。

一旦我将Engine更改为支持事务的InnoDB,一切都会按预期工作,并且锁定机制开始起作用。

所以基本上您要做的就是:

ALTER TABLE jobs ENGINE = InnoDB;

希望能解决您的痛苦...

答案 1 :(得分:0)

  

$ schedule-> command('emails:send')-> withoutOverlapping();