使用AWS SQS的Laravel队列。如何在每个队列中只运行一个作业?

时间:2015-06-07 08:10:06

标签: laravel queue amazon-sqs

我是Laravel Queues的新手,只是构建了一个像这样的测试代码:

class TestController extends Controller {

public function testQueue2()
{
    Queue::push('QueueController@fire', array('id' => 114));
}

,队列任务是:

class QueueController extends Controller {

public function fire($job, $data)
{
    Log::info('This is some useful information.'.$data['id']);
}

比点击URL运行队列测试。 SQS运行良好,我的服务器日志获取这些信息:

[2015-06-07 15:53:04] production.INFO:这是一些有用的信息.14 [] []

[2015-06-07 15:53:36] production.INFO:这是一些有用的信息.14 [] []

[2015-06-07 15:53:37] production.INFO:这是一些有用的信息.14 [] []

[2015-06-07 15:54:09] production.INFO:这是一些有用的信息.14 [] []

[2015-06-07 15:54:10] production.INFO:这是一些有用的信息.14 [] []

[2015-06-07 15:54:42] production.INFO:这是一些有用的信息.14 [] []

我希望队列任务只执行一次,而不是6次,我该怎么办呢?

感谢。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用Laravel 4.2。来自文档:

  

push方法的第一个参数是应该用于处理作业的类的名称

我认为如果您不想使用Job类的fire方法,则只需指定要使用的方法。

换句话说,尝试将代码修改为:

Queue::push('QueueController', array('id' => 114));

让你的控制器成为这项工作执行的实施者也有点奇怪,但那是另一回事。