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

Specify queue to push on in an Event Class

我正在使用多个队列并希望将事件推送到默认队列以外的另一个队列。

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

我试过

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

但这不是我想要的。有办法吗?

在 Laravel 源代码上花了一些时间后,我相当确定这是不可能的。

Events/Dispatcher.php 的 createClassCallable 检查您的 class 是否有工具 ShouldQueue,如果有,调用 Dispatcher 的 createQueuedHandlerCallable()方法,当依次调用 $this->resolveQueue()->push().

时将您的事件排队

问题是推送的第三个参数是要推送到哪个队列,而那个参数没有传递。所以它将始终使用默认队列,因此您无法指定备用默认队列。

我建议您自己为活动排队,例如:

Queue::push(
    function() {
        event(new NewMessageArrived());
    },
    '',
    'my-queue'
);

在听众上:

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


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

开心=)

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

我试图覆盖 $queue 因为它 public 但是 laravel 5.6 return 错误。

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