如何确定排队事件的优先级?

时间:2016-08-30 10:51:33

标签: laravel laravel-5

我在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.

任何帮助将不胜感激..

1 个答案:

答案 0 :(得分:1)

laravel的解决方案&gt; 5.0 根据手册https://www.laravel.com/docs/5.3/queues#queue-priorities,您应该为此目的定义不同的队列,例如名称highlow。具有较高优先级的邮件应转至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