zoukankan      html  css  js  c++  java
  • laravel队列使用

    laravel队列,可以很方便的处理异步任务。

    5.2版的队列缺陷较多,比如queue:listen的且每次尝试执行子任务都重启框架,内存占用太大,且--timeout参数是针对命令行的运行时间而不是子任务的运行时间。想使用占用内存少的queue:work却没有--timeout参数。

    后来使用5.4版本,队列功能已经很完善,但是发现timeout参数却无效了,郁闷(无论是在任务中,还是命令行中设定,都无法控制子任务时间)

    laravel队列用起来会省心,这就是框架的力量,以下是laravel队列帮我们做的事

    1.重试,--tries=3

    2.限制子任务运行时长,--timeout=60(5.4版本中实测无效)

    3.针对子任务,可以定制执行任务前/执行任务后的回调函数( 服务容器中的before 和 after 方法),便于做日志等

    4.多种连接(beanstalkd,redis,mysql)

    5.多个队列 -queue=queue1,queue2,queue3...,还能指定队列的优先级,--queue=queue3,queue1,queue2,从左到右,左边最高,右边最低

    6.便捷的对所有命令重启queue:restart (需结合supervisor对work重启)

    目前还有疑问的功能

    1.try_after;按手册说,该配置项的目的是定义任务在执行以后多少秒后释放回队列,但是我执行某任务的时间已经超过了try_after,也没见此任务停止

    需要注意

    1.tries选项,如果不加,则任务一直不成功时会无限尝试。对于某一任务来说,每次执行时,attemps字段都加1,但并不是上次失败后立刻重试,而是把其他任务都走一遍再回来执行这个任务(测试是这样的);

    2.在写任务逻辑时,注意有些逻辑无需/不能重复,则要在程序中对重复进行判断;

    3.如果在new xxjob时,需要在构造方法中传递参数,并将此参数传递给一个属性,则一定要在类xxjob中声明这个属性,否则序列化后找不到未声明的属性。

    4.一定注意监听任务的运行状况,并做好任务日志。

  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/ch459742906/p/7649987.html
Copyright © 2011-2022 走看看