封装 laravel 的公共队列,延迟处理任务

 Laravel  2023-07-03  admin  1669  2253

封装 laravel 的公共队列,延迟处理任务

<?php
/**
 * This file is part of LunanShopTeam.
 *  http://code.cent123.com/
 * @author http://code.cent123.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}');


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

相关推荐


Systemd Web 管理系统:简化服务管理

# Systemd Web Systemd Web 是一个 Systemd 的 Web UI 管理系统,通过直观的界面和易用的操作,让用户能够轻松地管理 Linux 系统和服务。该项目旨在简化 Systemd 的使用,使得无论是专业的系统管理员还是普通的用户,都能够方便地对系统进行操作。 ## [github地址] (https://github.com/topascend/systemd

laravel 自定义写入日志

laravel 自定义写入日志if(!function_exists(&#39;myLog&#39;)){ /** *生成自定义文件日志内容 *@param$data *@paramstring$title *@parambool$isClear *@returnvoid *@Author:cent123.com */ functionmyLog($data,string$tit

systemctl 使用

Systemd是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置。而systemctl是Systemd的主命令,用于管理系统。其实我们大部分服务都有使用systemctl管理,比如MySQL、Nginx等等。常见配置如下:[Unit] #单元描述 Description=GFAPP #在什么服务启动之后再执行本程序 After=mysql.service [Serv

laravel 单元测试报错 RuntimeException : A facade root has not been set.

laravel 单元测试报错 RuntimeException : A facade root has not been set.