Laravel5.5 使用队列

今天就对 Laravel 的队列功能做个简单的事例,我使用的驱动是 redis,详细可以查看文档

生成任务类

1
php artisan make:queue SendMsg

就会在 app/Jobs 目录下面生成 SendMsg.php 文件,下面我们去编辑。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;

class SetTopicRecommend implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;


private $msg;

/**
* Create a new job instance.
*
* @return void
*/
public function __construct($msg)
{
$this->msg = $msg;
}

/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Log::info($this->msg); // 写日志,可以在日志文件中进行查看
}
}

分发任务

分发任务有 3 中方式,具体如下:

1
2
3
4
5
6
7
8
9
10
11
# 在控制器中,可以直接用
$this->dispatch(new SendMsg("job test msg"));

# 类方法执行
SendMsg::dispatch("job test msg");

# 辅助函数调用
dispatch(new SendMsg("job test msg"));

# 延迟分发
SendMsg::dispatch("job test msg")->delay(now()->addMinutes(10)); // 延迟 10 分钟

执行任务

我们需要单独启用 php 来执行其任务队列,直接使用:

1
2
3
4
5
6
7
8
php artisan queue:work

# 后面常用参数
--queue: 执行的队列名称
--tries:任务任务失败尝试次数
--timeout:任务执行最大秒数
--daemon:后台运行,作为守护进程
--sleep: 没有任务休眠,默认为 3s

Supervisor

如果队列作为守护进程的话,需要监控,这里采用 python 写的 Supervisor,下面就是其具体配置:

1
2
3
4
5
6
7
8
9
10
11
#/etc/supervisor/conf.d/laravel.conf

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/logs/laravel.log

执行命令 supervisorctl start all 启动,可以用 supervisorctl status 查看状态,其他命令:

1
2
3
4
supervisorctl start
supervisorctl stop
supervisorctl status
supervisorctl restart

©版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 & 作者信息

Happy Coding

坚持原创技术分享,您的支持将鼓励我继续创作!
Flyertutor WeChat Pay

WeChat Pay

Flyertutor Alipay

Alipay