Laravel 5.1:后台队列事件无法正常工作

时间:2015-08-19 14:06:25

标签: laravel events queue amazon-sqs laravel-5.1

我在\ app \ Events \ TestEventTriggered.php:

下创建了一个测试事件
<?php

namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class TestEventTriggered extends Event
{
    use SerializesModels;


    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct()
    {        }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return [];
    }
}

app \ Listeners \ ListenToMyEvent.php下的事件监听器:

<?php

namespace App\Listeners\Events;

use App\Events\TestEventTriggered;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;

class ListenToMyEvent implements ShouldBeQueued
{
    use InteractsWithQueue;

    /**
     * Create the event handler.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  TestEventTriggered  $event
     * @return void
     */
    public function handle(TestEventTriggered $event)
    {
        // do some stuff
    }
}

在app \ Providers \ EventServiceProvider.php中:

protected $listen = [
    'App\Events\TestEventTriggered' => [
        'App\Listeners\ListenToMyEvent'
    ]
];

然后我在我的模型的保存方法中触发事件:

\Event::fire(new \App\Events\TestEventTriggered);

当我保存模型时,事件将同步处理。因此队列不处理事件的句柄方法。

文档说在侦听器中实现ShouldBeQueued合约,这是我的监听器中的情况。但是,我应该如何实际将事件的句柄方法推送到队列中?我在这里缺少什么步骤?我在哪里声明应该推送哪个队列/管? 我正在使用Amazon SQS来处理我的队列。

laravel docs对这件事情有点混乱......

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

解决方案是添加一个队列方法,您可以在其中设置应将事件发送到的特定管道:

public function queue($queue, $command)
{
    $queue->pushOn('your_queue_name',$command);
}