封装 laravel 的公共队列,延迟处理任务
<?php /** * This file is part of LunanShopTeam. * http://centphp.com/ * @author http://centphp.com/view/387 */ namespace App\Jobs; use Exception; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; /** * php artisan queue:restart * php artisan queue:work --queue="{common_queue}" * php artisan queue:work --queue="common_queue" * artisan queue:work --once --queue={default} --delay=0 --memory=128 --sleep=3 --tries=1" */ class CommonQueue implements ShouldQueue { use Dispatchable; use InteractsWithQueue; use Queueable; use SerializesModels; /** * 应该处理任务的队列连接. * * @var string */ //public $connection = 'redis'; /** * 任务可以尝试的最大次数。 * * @var int */ public $tries = 5; /** * 任务可以执行的最大秒数 (超时时间)。 * * @var int */ public $timeout = 1800; protected $common_data; /** * Create a new job instance. * @param $common_data */ public function __construct($common_data) { $this->common_data = $common_data; } /** * Execute the job. * * 使用方法: $common_data = [ 'class' => \Modules\PresentCard\Models\PresentCard\ProPresentCardInfo::class, 'func' => 'batchGenerateCard', 'data' => [ 'id' => '123', 'type' => '1', ] ]; * CommonQueue::dispatch($common_data)->onConnection('redis')->onQueue('{common_queue}'); */ public function handle() { //print_r($this->common_data); $class = '\\' . $this->common_data['class']; $func = $this->common_data['func']; $data = $this->common_data['data']; //数组 $class = new $class; call_user_func_array([$class, $func], [$data]); } /** * 任务失败的处理过程. */ public function failed(Exception $exception) { // 给用户发送任务失败的通知,等等…… } }
启动:
* php artisan queue:restart
* php artisan queue:work --queue="{common_queue}"
* php artisan queue:work --queue="common_queue"
* artisan queue:work --once --queue={default} --delay=0 --memory=128 --sleep=3 --tries=1"
使用:
$common_data = [ 'class' => \Modules\PresentCard\Models\PresentCard\ProPresentCardInfo::class, 'func' => 'batchGenerateCard', 'data' => [ 'id' => '123', 'type' => '1', ] ]; CommonQueue::dispatch($common_data)->onConnection('redis')->onQueue('{common_queue}');