laravel 队列 job

目录

一、失败队列

二、队列配置

1、同步用法 sync

2、数据库驱动 database

3、缓存驱动 redis

三、队列日志

1、任务执行日志

2、日志输出

四、supervisor 管理队列

五、默认队列配置文件


一、失败队列

(1)配置

# config/queue.php
    'failed' => [
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => 'failed_jobs',
    ],

(2)建表

php artisan queue:failed-table    # 创建迁移文件,默认创建 failed_jobs 表

php artisan migrate

二、队列配置

1、同步用法 sync

(1)同步调用方法一

  • 配置 sync
# .env
QUEUE_DRIVER=sync

# conf/queue.php
    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],
        ...
    ],
  • 调用
MyJob::dispatch($book);

(2)同步调用方法二

        $book = Book::first()->toArray();

        //同步调用
        $job = new MyJob($book);
        $job->handle();

2、数据库驱动 database

  • 配置
# .env
QUEUE_DRIVER=database

# conf/queue.php
    'connections' => [
        'database' => [                    # 队列连接,来自 config/database.php
            'driver' => 'database',
            'table' => 'jobs',             # 表名
            'queue' => 'default',          # 队列名
            'retry_after' => 90,           # 重新进队时间 > 超时时间timeout
        ],
    ],
  • 建表

       默认创建名为 jobs 的数据表,用来存储任务。

php artisan queue:table     # 创建迁移文件,默认 jobs 表

php artisan migrate
  • 监听

       tries 重试次数,不设置代表失败无限重试;

       timeout 超时时间,超时会停止任务执行;

       retry_after 超时重试时间,超时会重新进队,应结合 timeout,避免任务未结束而重复进队。

php artisan queue:work [队列连接] [队列] [重试次数] [超时关闭时间] [重试重试时间]
php artisan queue:work database --queue=default --tries=3 --timeout=80 --retry_after=90

php artisan queue:work --tries=3 --timeout=80 --retry_after=90

php artisan queue:work --tries=3 --timeout=80

php artisan queue:work --tries=3

php artisan queue:work
  • 调用

       同一个数据库,同一个表 jobs,不同的队列:default、default1。如果不指定队列,则使用默认的队列 default,不需要另外的配置。

        $book = Book::first()->toArray();

        MyJob::dispatch($book)->delay(2);
        MyJob::dispatch($book)->delay(2)->onConnection('database')->onQueue('default');
        MyJob::dispatch($book)->delay(2)->onQueue('default');  // php artisan queue:work database --queue=default --tries=3
        MyJob::dispatch($book)->delay(2)->onQueue('default1');  // php artisan queue:work database --queue=default1 --tries=3

        MyJob::dispatch($book)->delay(Carbon::now()->addSeconds(10));

3、缓存驱动 redis

  • 配置(多个)
# .env
QUEUE_DRIVER=redis

# conf/queue.php
    'connections' => [
        'redis' => [                      # 队列连接(默认)
            'driver' => 'redis',
            'connection' => 'default',    # 缓存配置连接,来自 config/database.php
            'queue' => 'default',         # 队列
            'retry_after' => 90,
        ],

        'redis1' => [                     # 队列连接
            'driver' => 'redis',
            'connection' => 'default1',   # 缓存配置连接,来自 config/database.php
            'queue' => 'default1',        # 队列
            'retry_after' => 90,
        ],
    ],
  • 监听(多个)
php artisan queue:work redis --queue=default  --tries=3

php artisan queue:work redis1 --queue=default1  --tries=3
  • 调用
        $book = Book::first()->toArray();

        MyJob::dispatch($book);             // php artisan queue:work redis --queue=default --tries=3
        MyJob::dispatch($book)->delay(2);   // php artisan queue:work redis --queue=default --tries=3
        MyJob::dispatch($book)->delay(2)->onConnection('redis');   // php artisan queue:work redis --queue=default --tries=3
        MyJob::dispatch($book)->delay(2)->onQueue('default');      // php artisan queue:work redis --queue=default --tries=3
        MyJob::dispatch($book)->delay(2)->onConnection('redis')->onQueue('default');   // php artisan queue:work redis --queue=default --tries=3

        MyJob::dispatch($book)->delay(2)->onConnection('redis1');  // php artisan queue:work redis1 --queue=default1 --tries=3
        MyJob::dispatch($book)->delay(2)->onConnection('redis1')->onQueue('default1'); // php artisan queue:work redis1 --queue=default1 --tries=3
  • 队列

       查看队列,当队列有任务时,会创建队列 queues:xxx 键,当队列任务清空时,会删除队列 queues:xxxx 键。

> redis-cli -h localhost -p 3306 -a 123

> keys queues*
"queues:default"
"queues:default:delayed"
"queues:default1:delayed"

> type queues:default:delayed
zset

> zcard queues:default:delayed
(integer) 2

> zrange queues:default:delayed 0 1
1) "{\"displayName\":\"App\\\\Jobs\\\\MyJob\",\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"maxTries\":null,\"timeout\":null,\"data\":{\"commandName\":\"App\\\\Jobs\\\\MyJob\",\"command\":\"O:14:\\\"App\\\\Jobs\\\\MyJob\\\":5:{s:3:\\\"msg\\\";a:6:{s:2:\\\"id\\\";i:1;s:4:\\\"name\\\";N;s:6:\\\"author\\\";s:9:\\\"author111\\\";s:12:\\\"publish_year\\\";s:4:\\\"2020\\\";s:10:\\\"created_at\\\";s:19:\\\"2020-10-04 20:48:31\\\";s:6:\\\"status\\\";i:0;}s:6:\\\"\\u0000*\\u0000job\\\";N;s:10:\\\"connection\\\";s:5:\\\"redis\\\";s:5:\\\"queue\\\";N;s:5:\\\"delay\\\";i:2;}\"},\"id\":\"T2L2hzBg1GhkYZDp0tErLYvjHva3QMph\",\"attempts\":0}"
2) "{\"displayName\":\"App\\\\Jobs\\\\MyJob\",\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"maxTries\":null,\"timeout\":null,\"data\":{\"commandName\":\"App\\\\Jobs\\\\MyJob\",\"command\":\"O:14:\\\"App\\\\Jobs\\\\MyJob\\\":5:{s:3:\\\"msg\\\";a:6:{s:2:\\\"id\\\";i:1;s:4:\\\"name\\\";N;s:6:\\\"author\\\";s:9:\\\"author111\\\";s:12:\\\"publish_year\\\";s:4:\\\"2020\\\";s:10:\\\"created_at\\\";s:19:\\\"2020-10-04 20:48:31\\\";s:6:\\\"status\\\";i:0;}s:6:\\\"\\u0000*\\u0000job\\\";N;s:10:\\\"connection\\\";s:5:\\\"redis\\\";s:5:\\\"queue\\\";N;s:5:\\\"delay\\\";i:2;}\"},\"id\":\"1tVD4tizRjs1lJPaVrXOVAo1BP8UTjQ9\",\"attempts\":0}"

三、队列日志

1、任务执行日志

       --tries=3,重试三次的队列日志

(1)成功

Processing: App\Jobs\MyJob

Processing: App\Jobs\MyJob

Processing:  App\Jobs\MyJob

Processed:  App\Jobs\MyJob

(2)失败

Processing: App\Jobs\MyJob

Processing: App\Jobs\MyJob

Processing: App\Jobs\MyJob

Failed:     App\Jobs\MyJob

2、日志输出

(1)handle 方法使用 Log 方法,会打印到 laravel 日志;

(2)handle 方法使用 dump 方法,会打印到 控制台 或者 队列日志(supervisor 配置);

四、supervisor 管理队列

[program:laravel_queue_default]
process_name=%(program_name)s_%(process_num)02d
command=php  /usr/local/nginx/html/laravel_0920/artisan  queue:work  redis  --queue=default  --tries=2  --timeout=15
autorestart=true
autostart=true
redirect_stderr = true
stdout_logfile=/usr/local/nginx/logs/laravel_queue_default.log
user=nginx
numprocs=2

五、默认队列配置文件

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Queue Driver
    |--------------------------------------------------------------------------
    |
    | Laravel's queue API supports an assortment of back-ends via a single
    | API, giving you convenient access to each back-end using the same
    | syntax for each one. Here you may set the default queue driver.
    |
    | Supported: "sync", "database", "beanstalkd", "sqs", "redis", "null"
    |
    */

    'default' => env('QUEUE_DRIVER', 'sync'),

    /*
    |--------------------------------------------------------------------------
    | Queue Connections
    |--------------------------------------------------------------------------
    |
    | Here you may configure the connection information for each server that
    | is used by your application. A default configuration has been added
    | for each back-end shipped with Laravel. You are free to add more.
    |
    */

    'connections' => [

        'sync' => [
            'driver' => 'sync',
        ],

        'database' => [
            'driver' => 'database',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 90,
        ],

        'beanstalkd' => [
            'driver' => 'beanstalkd',
            'host' => 'localhost',
            'queue' => 'default',
            'retry_after' => 90,
        ],

        'sqs' => [
            'driver' => 'sqs',
            'key' => 'your-public-key',
            'secret' => 'your-secret-key',
            'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',
            'queue' => 'your-queue-name',
            'region' => 'us-east-1',
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'retry_after' => 90,
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Failed Queue Jobs
    |--------------------------------------------------------------------------
    |
    | These options configure the behavior of failed queue job logging so you
    | can control which database and table are used to store the jobs that
    | have failed. You may change them to any database / table you wish.
    |
    */

    'failed' => [
        'database' => env('DB_CONNECTION', 'mysql'),
        'table' => 'failed_jobs',
    ],

];

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值