laravel queue(异步队列) 管理队列工具 Supervisor

代码

 // 执行一个异步队列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

查看所有的 队列进程

ps -ef | grep queue

结果 

好了,这样就Supervisor管理的三个进程的队列

发布了264 篇原创文章 · 获赞 46 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/qq_27229113/article/details/103202097