laravel 队列使用

 Laravel  2021-04-01  admin  1479  1996

laravel 队列使用

app/jobs/CacheHtmlManage.php

namespace App\Jobs;

use App\Models\CronJob\HtmlCacheJob;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class CacheHtmlManage implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;
    use SerializesModels;

    /**
     * 应该处理任务的队列连接.
     *
     * @var string
     */
    //public $connection = 'redis';

    /**
     * 任务可以尝试的最大次数。
     *
     * @var int
     */
    public $tries = 5;

    /**
     * 任务可以执行的最大秒数 (超时时间)。
     *
     * @var int
     */
    public $timeout = 120;

    protected $cache_html;

    /**
     * Create a new job instance.
     * @param $cache_html 
     * $cache_html 为队列分发时传入的数据
     */
    public function __construct($cache_html)
    {
        $this->cache_html = $cache_html;
    }

    /**
     * Execute the job.
     */
    public function handle()
    {
        // 具体的队列执行方法
        //print_r($this->cache_html);
        $model = new HtmlCacheJob();
        $model->deleteHtml($this->cache_html);
    }

    /**
     * 任务失败的处理过程.
     */
    public function failed(Exception $exception)
    {
        // 给用户发送任务失败的通知,等等……
    }
}

在控制器中分发任务:

 CacheHtmlManage::dispatch($data)->onConnection('redis')->onQueue('{cache_html}'); //指定了队列连接和队列名称

运行:

因为队列 worker 是长生命周期的进程,所以在重启之前,任何的代码更改都不会生效。因此,使用队列 worker 部署应用程序的最简单方法是在部署过程中重新启动 worker。你可以通过执行 queue:restart 命令来优雅地重新启动所有的 worker:该命令将指示所有队列 worker 在完成当前任务后优雅地 “死亡”,这样就不会丢失现有的任务。由于在执行 queue:restart 命令时,队列 worker 将被杀掉,因此你应该运行一个进程管理器 (如 Supervisor) 来自动重新启动队列 worker。

php artisan queue:restart  // 重启队列
php artisan queue:work --queue="{cache_html}"  // 启动队列,并指定执行的队列名称

队列配置文件:

conifg/queue.php

'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        'redis' => [
            'driver'      => 'redis',
            'connection'  => 'default',
            'queue'       => env('REDIS_QUEUE', '{default}'),
            'retry_after' => 90,
            'block_for'   => null,
        ],
        'failed' => [
            'database' => env('DB_CONNECTION', 'queue'), //队列执行失败 存放的数据库
            'table'    => 'failed_jobs', //队列执行失败 存放的表
        ],
    ],


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

转载必须注明出处:

laravel 队列使用 —— code.cent123.com

相关推荐


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

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

laravel 自定义写入日志

laravel 自定义写入日志if(!function_exists('myLog')){ /** *生成自定义文件日志内容 *@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 的公共队列,延迟处理任务

封装 laravel 的公共队列,延迟处理任务<?php /** *ThisfileispartofLunanShopTeam. *http://code.cent123.com/ *@authorhttp://code.cent123.com/view/387 */ namespaceApp\Jobs; useException; useIlluminate\B