我正在使用多个队列,并希望将事件推送到另一个队列而不是默认队列。
我有一个实现ShouldQueue的标准事件类,但是如何指定此事件将被推送到的队列?
我试过
class NewMessageArrived extends Event implements ShouldQueue
{
use SerializesModels;
protected $queue = 'redis';
....
但这不符合我的要求。有没有办法做到这一点?
答案 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
会返回错误。
因此,在类构造中设置队列是我找到的最短的工作解决方案。