指定要在事件类中推送的队列

时间:2015-07-26 15:15:29

标签: php laravel queue laravel-5.1

我正在使用多个队列,并希望将事件推送到另一个队列而不是默认队列。

我有一个实现ShouldQueue的标准事件类,但是如何指定此事件将被推送到的队列?

我试过

class NewMessageArrived extends Event implements ShouldQueue
{
    use SerializesModels;
    protected $queue = 'redis';
    ....

但这不符合我的要求。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:6)

On Listener:

public $queue = 'notifications'; //Queue Name


public function queue(QueueManager $handler, $method, $arguments)
{
    $handler->push($method, $arguments, $this->queue);
}

快乐=)

答案 1 :(得分:2)

在使用Laravel源代码花了一些时间后,我很确定这是不可能的。

Events / Dispatcher.php的createClassCallable检查您的类是否具有实现ShouldQueue,如果是,则调用Dispatcher的createQueuedHandlerCallable()方法,然后通过调用{{{ 1}}。

问题是push的第三个参数是要推送的队列,并且该参数未被传递。因此它将始终使用默认队列,因此您无法指定备用默认队列。

我建议您自己使用以下内容排队:

$this->resolveQueue()->push()

答案 2 :(得分:1)

public function __construct()
{
    $this->queue = 'high';
}

我尝试覆盖$queue,因为它是公开的,但是,laravel 5.6会返回错误。

因此,在类构造中设置队列是我找到的最短的工作解决方案。