zoukankan      html  css  js  c++  java
  • 如何使用laravel queue 队列的简单例子

    使用队列有利于模块与模块,系统与系统之间的解耦,对构建高内聚,松耦合的系统很重要, laravel 队列基本工作方式:dispatch 一个 job 的时候,laravel 把 job 序列化保存到相应的 driver 中(redis、database、file...),然后 queue:listen 或 queue:work 的时候会从对应的 driver 里面取出这个 job,对 payload 反序列化,然后调用 job 里面的 handle 方法进行 job 的处理。

    以下是如果在laravel使用队列的简单实例

    1、修改.evn

    设置queue为redis驱动

    queue驱动主要有sync,redis,database,mq  ,中小型系统建议使用redis, 复杂系统使用mq

    初始默认为sync 这个分派任务的时候直接同步执行,修改为redis则使用redis 的list(尽快执行的队列)和zset(延时执行的队列)两种数据类型保存,也可以用数据库为驱动

    QUEUE_CONNECTION=redis

    并配置好你的redis,以下是我本机的配置

    REDIS_HOST=127.0.0.1 
    REDIS_PASSWORD=null
    REDIS_PORT=6379
    REDIS_DATABASE=0
    

    2、创建任务,例子创建一个 aSampleQueue

    php artisan make:job aSampleQueue
    

     

    3、修改aSampleQueue.php

    class aSampleQueue implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        private $message;
    
    
       public function __construct($message)
    {
    $this->message = $message;
    //
    }

    //handle 方法是队列需要执行的业务,这里用一个写一条日志作为业务内容
    public function handle() { Log::info($this->message); // } }

    4、分发内容给队列,本例子假定在路由上调用

    Route::get('/test/queue/{name}', function ($name){
        AppJobsaSampleQueue::dispatch("创建用户:{$name}".date('H:i:s'));//立即执行的队列
    });

    假定域名为la.com,在浏览器输入:http://la.com/test/queue/lucas     ,到redis查看,如下图

     也可以制定队列名onQueue('delayQueueSample')和指定执行时间addMinutes(30) 

    Route::get('/test/queue/{name}', function ($name){
        AppJobsaSampleQueue::dispatch("创建用户:{$name}".date('H:i:s'))->onQueue('delayQueueSample')->delay(IlluminateSupportCarbon::now()->addMinutes(30));//延迟30分钟执行 });

    在redis查到该队列,说明写入成功

    4、用命令行执行队列

    php artisan  queue:work
    

     这是一个常驻进程,需要停止可以按ctrl+c

    5、如果使用数据库来保存队列,执行

    php artisan queue:table
    php artisan migrate

    并在.evn 修改

    QUEUE_CONNECTION=database
    

    完成。

    参考:

    1、https://blog.csdn.net/raoxiaoya/article/details/104241467 Laravel延迟队列的实现原理

    2、https://www.cnblogs.com/eleven24/p/9348932.html  使用 Laravel 的 queue 必须知道的一些事

      

      

  • 相关阅读:
    地质三维软件Ctech(MVS,EVSPRO)破解版
    自已动手制做“0中带斜杠”的矢量字体
    HDU 4549 M斐波那契数列
    Troubleshooting:CentOS安装小记
    RDP支持的颜色深度
    Qt多线程学习:创建多线程
    NFS安装配置
    多台电脑共享键盘鼠标
    Troubleshooting:HTTP Status 500 Error instantiating servlet class xxx
    Win7远程桌面连接
  • 原文地址:https://www.cnblogs.com/jinshao/p/15125599.html
Copyright © 2011-2022 走看看