我在laravel 5.0工作
我使用数据库作为队列驱动程序。 我创建了2个事件A和B.我希望事件B始终先执行。 即使在事件A之后将事件B插入到作业表中,它也应该首先执行。
我的两个活动都包含
implements ShouldBeQueued
和
use InteractsWithQueue;
我的事件处理程序就是这样..
<?php namespace App\Handlers\Events;
use App\Events\A;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;
class A implements ShouldBeQueued {
use InteractsWithQueue;
/**
* Create the event handler.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param A $event
* @return void
*/
public function handle(A $event)
{
$alldeviceID = $event->alldeviceID;
$gcmMessage = $event->gcmMessage;
send_notification($alldeviceID, $gcmMessage);
}
}
所以这两个事件都进入了工作表,我有主管(流程经理)来处理它们。
到目前为止工作正常,只是因为我想在事件A中优先考虑事件B.
任何帮助将不胜感激..
答案 0 :(得分:1)
laravel的解决方案&gt; 5.0 强>
根据手册https://www.laravel.com/docs/5.3/queues#queue-priorities,您应该为此目的定义不同的队列,例如名称high
和low
。具有较高优先级的邮件应转至high
队列,如dispatch((new Job)->onQueue('high'));
。更重要的是,您应该使用以下命令启动您的员工
php artisan queue:work --queue=high,low --daemon
其中--queue=high,low
定义了处理消息的优先级。
laravel 5.0解决方案
\Queue::pushOn('high', new Job);
您应该使用以下命令启动您的员工
php artisan queue:listen --queue=high,low --daemon