laravel queue(异步队列) 管理队列工具 Supervisor
原创
©著作权归作者所有:来自51CTO博客作者qq58fdc80357c56的原创作品,请联系作者获取转载授权,否则将追究法律责任
代码
// 执行一个异步队列redis去去执行这个方法
GenerateWalletAddress::dispatch($user->id)->onQueue('getnewaddress')->onConnection('redis');
任务方法示例
<?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 App\Models\UsersWallet;
class GenerateWalletAddress implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $userid;
public function __construct($userid)
{
//
$this->userid = $userid;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try {
defined('IS_FORMAL_HOST') or define('IS_FORMAL_HOST', 1);
$address = new UsersWallet;
$address->add_address($this->userid, 1);
} catch (\Exception $e) {
debug_log('script/address.log', $e->getMessage());
}
}
}
执行 命令行
php artisan queue:work redis --queue getnewaddress --tries=1
注: 调用getnewaddress任务执行redis queue队列
tries 失败次数一次
下面是使用 Supervisor
这段来着laravel 官方文档
Supervisor 配置
安装 Supervisor
Supervisor 是 Linux 操作系统下中的一个进程监控器,它可以在 queue:work
挂掉时自动重启之。在 Ubuntu 上安装 Supervisor,你可以使用如下命令:
sudo apt-get install supervisor
{小提醒} 如果觉得配置 Supervisor 难于登天,可以考虑使用 Laravel Forge,它将自动为你的 Laravel 项目安装和配置 Supervisor。
配置 Supervisor
Supervisor 的配置文件通常位于 /etc/supervisor/conf.d
目录下。在该目录中,你可以创建任意数量的配置文件,用来控制 supervisor 将如何监控你的进程。例如,创建一个 laravel-worker.conf
文件使之启动和监控一个 queue:work
进程:
[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/forge/app.com/worker.log
在这个例子中,numprocs
指令将指定 Supervisor 运行 8 个 queue:work
进程并对其进行监控,如果它们挂掉就自动重启它们。你应该更改 command
选项中的 queue:work sqs
部分以表示你所需的队列连接。
启动 Supervisor
配置文件创建完毕后,你就可以使用如下命令更新 Supervisor 配置并启动进程了:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
安装好后说说用法
我的配置文件位于 /etc/supervisor/conf.d
编写 配置文件 cat htapp_getnewaddress.conf
[program:htapp_getnewaddress]
process_name=%(program_name)s_%(process_num)02d
command= php /data/wwwroot/test.hamdantoken.io/HamdanTokenApp/artisan queue:work redis --queue=getnewaddress --sleep=3 --tries=1 --daemon
autostart=true
autorestart=true
user=root
numprocs=3
redirect_stderr=true
stdout_logfile=/data/wwwlogs/htapp_getnewaddress.log
注: 配置任务方法 program
编辑你的配置文件laravel-worker.conf
添加启动
command= php /data/wwwroot/test.hamdantoken.io/HamdanTokenApp/artisan queue:work redis --queue=getnewaddress --sleep=3 --tries=1 --daemon
队列方法 错误重发一次
supervisorctl update
重新加载 配置 htapp_getnewaddress
supervisorctl update htapp_getnewaddress
启动这个方法
supervisorctl status htapp_getnewaddress
查看所有的 队列进程
结果
好了,这样就Supervisor管理的三个进程的队列