Laravel使用指定的名称队列

/ 0评 / 1 / 3,430 次 /

Laravel框架中提供了便捷的队列服务使用方法,如果使用的是redis、database、sqs等作为异步队列的驱动,都会配置有对应的队列名称,来看下框架提供的默认redis驱动的配置:

这里配置的是使用redis驱动队列的队列连接名称、队列名称、超时时间。
但是如果我们要指定不同的任务队列使用不同的队列名称,该怎么办?
在官方文档中如果是Job可以使用dispatch(new Job())->onQueue('queue_name')来触发执行到指定的队列。但是事件(Event)中怎么使用指定名称的队列呢?

经过一番,查阅框架源码发现,

这里在处理事件监听使用队列处理的时候,会首先检查当前监听类是否存在queue方法。

这里回调了当前监听的queue来处理队列。
由此我们大概应该知道怎么来写监听类的队列处理了吧!如下:

当然,这里还要提及的一点是,在Laravel的Artisan命令queue:work中,默认指定的是'default'队列的监听,如果是你使用了其他队列名称,就要在使用php artisan queue:work 命令中使用--queue来指定监听的队列 。

php artisan queue:work --queue="default,listener_queue"

--queue参数中,队列名称的先后决定了队列处理的优先级

在Laravel 5.0 以上版本中,可以直接在Job中定义 $queue 属性,可以省去在其他地方调用Job 指定队列名称。

<?php

namespace App\Jobs;

use App\Exceptions\JsonException;
use App\Http\Business\CheckStock\CheckStockBusiness;
use Carbon\Carbon;

/**
 *  更新采纳比例
 *
 * Class UpdateCheckStockManageAcceptRate
 * @package App\Jobs
 * @author jiangxianli
 * @created_at 2019-06-04 14:28
 */
class UpdateCheckStockRecommendMarkRate extends Job
{
    /**
     * 运行队列名称
     *
     * @var string
     */
    public $queue = "update-check-stock-recommend-mark-rate";

    /**
     * 荐股ID
     *
     * @var
     */
    private $check_stock_id;

    /**
     * 构造函数
     *
     * UpdateCheckStockManageAcceptRate constructor.
     * @param $check_stock_id
     */
    public function __construct($check_stock_id)
    {
        $this->check_stock_id = $check_stock_id;
    }

    /**
     * 更新跟踪成绩
     *
     * @param CheckStockBusiness $check_stock_business
     * @throws JsonException
     * @throws \App\Exceptions\ApiException
     * @author jiangxianli
     * @created_at 2019-06-04 15:44
     */
    public function handle(CheckStockBusiness $check_stock_business)
    {
        $check_stock_business->updateRecommendMarkRate($this->check_stock_id);
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注