我在\ 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对这件事情有点混乱......
感谢任何帮助。
答案 0 :(得分:0)
解决方案是添加一个队列方法,您可以在其中设置应将事件发送到的特定管道:
public function queue($queue, $command)
{
$queue->pushOn('your_queue_name',$command);
}