精华内容
下载资源
问答
  • 一篇文章:laravel中的队列服务跟其他队列服务也没有什么不同,都是最符合人类思维的最简单最普遍的流程:有一个地方存放队列信息,一个PHP进程在运行时将任务写入,另外一个PHP守护进程轮询队列信息,将达到执行...

    一篇文章:

    laravel中的队列服务跟其他队列服务也没有什么不同,都是最符合人类思维的最简单最普遍的流程:有一个地方存放队列信息,一个PHP进程在运行时将任务写入,另外一个PHP守护进程轮询队列信息,将达到执行要求的任务执行并删除。由于PHP是url驱动的同步语言,本身是阻塞的,所以laravel提供一个守护进程工具来查询并执行队列信息也就不足为奇了。

    Laravel的queue配置文件是 /app/config/queue.php,在 Default Queue Driver 这一项中,可以选择"sync", "beanstalkd", "sqs", "iron", "redis" 五种驱动器。

    配置文件:

    queue.php

    'redis' => array(

    'driver' => 'redis',

    'queue' => 'default',

    ),

    database.php:

    /*

    |--------------------------------------------------------------------------

    | Redis Databases

    |--------------------------------------------------------------------------

    |

    | Redis is an open source, fast, and advanced key-value store that also

    | provides a richer set of commands than a typical key-value systems

    | such as APC or Memcached. Laravel makes it easy to dig right in.

    |

    */

    'redis' => array(

    'cluster' => false,

    'default' => array(

    'host' => '127.0.0.1',

    'port' => 6379,

    'database' => 'laravelFirst',

    ),

    ),

    1. sync是本地调试用的同步驱动器

    3. sqs和iron是国外第三方队列服务

    4. 最后一项redis给了我们一个使用redis的理由,这样我们顺便把缓存服务和session服务全部迁移到redis上了。

    0. 顺便说一句,session驱动器千万别用mysql,处理时间1S不是梦,哎,看谁呢,说的就是你,1S哥!

    队列服务需要专门新建任务类,作为独立类,他们不需要继承类,因为队列里的任务在执行的时候,是由PHP守护进程来独立调用的,当然如果你要use一下别的类再调用,也不会出错。之前我把很多额外服务独立到了一个单独的文件夹 /app/services 里,比如输入信息验证 validator,特殊安全验证模块等,这次queue类们就位于其中。

    queue的使用非常简单,下面就是一个简单的示例:

    use Queue;

    Queue::push('CurlJsonQueue', [

    'url' => $url,

    'json' => $json

    ]);

    这就是一个标准的queue压入流程了。当然,在这里我把CurlJsonQueue类放到了services根目录下,这个目录已经被我注册到composer.json的"autoload"的"classmap"中,是位于顶层命名空间中的,可以直接调用,如果需要调用非顶层命名空间,是可以写 App\OOXX 的。我们的系统需要大量和微信服务器交互,所以就独立出来了这个类。

    class CurlJsonQueue extends BaseController{

    public function fire($job, $data)

    {

    $url = $data['url'];

    $json = $data['json'];

    parent::base_post_curl($url, $json);

    $job->delete();

    }

    }

    这个类默认的方法是 fire() ,参数也是固定的两个 $job 和 $data,由于我在BaseController中封装了post的curl模块,所以就调用了一下。另外这里还有一个小坑,当时写base_post_curl() 的时候用的protected,导致use BaseController无效,必须继承。

    通过执行上面的代码,queue中就被放入了一个新的任务,laravel通过下面的命令开启守护进程:

    php artisan queue:listen

    然后守护进程就开始处理队列了。此代码中的PHP命令和artisan文件的路径请自行调整。

    大家可能注意到了,我们要使用的这个队列系统用到了redis和PHP命令行,如果在测试环境,加个开机启动甚至是手动启动都可以,但是在生产环境就需要更稳固的工具来守护这两个程序,我们用的是supervisor,关于supervisor的安装配置大家可以参考这篇文章: http://blog.segmentfault.com/qianfeng/1190000000532561 注意,文章里有小坑请自行去踩。。。

    OK,全部配置好之后,跑起来redis和PHP命令行,整个系统就开始愉快地运行啦~

    使用感受:

    队列服务超好用,之前一次和app的交互流程需要6-7S,异步以后降低到2S以内,基本就是传输时间和PHP代码运行时间了,耗时的特殊操作已经异步了。不过队列服务默认1S开一个进程检查一次redis中有没有可以运行的服务,在阿里云服务器上,大约能占到单核的10%,消耗略大,而且队列处理时间相对较长,因为没有了之前同步时候的文件加载福利。不过如果有多个任务,PHP进程是会连续执行的,不会1S执行一个的啦。

    下面说说坑:

    1. 由于queue核心类使用了一个特殊函数,导致没有明确类型的变量会以单元素数组的形式存进json,再存进redis。解决办法就是在每一个要放进去的数据前面加上 ''. 。上面的$url和$json由于都已经在前面用引号进行了类型申明,故没做这一步操作。

    2. 如果要传递url给队列,系统queue类会在每一个 / 前面加上两个 \\ 。这对于一些特殊操作可能会造成致命影响。(开玩笑,有上面那个致命么!)

    ------------------

    我的使用,在app/service存放一个文件:

    classSendEmail{public function send($job,$data)

    {system(SEND_MAIL);$job->delete();

    }

    }

    某个地方放入队列:

    Queue::push('SendEmail@send', array('message' =>"hello world"));

    有时候queue default会有2个queue:

    一篇文章:

    ---

    利用Redis可以很方便的实现一个任务队列,但是在Laravel中,Redis的队列总会出现一个任务多次执行的问题。究其原因是它写死了reserved的时长,也就是如果1分钟后任务没有执行完成,那么这个任务就会被重新放回队列。下面是队列的简单使用和执行原理。

    设置

    设置队列使用Redis非常容易,在app/config/queue.php中配置

    ...'default'=>'redis',...'connections'=>array(...'redis'=>array('driver'=>'redis','queue'=>'waa',),),

    即可。

    使用

    使用时不需要多配置,只要写好Queue类和其fire方法,在需要的位置出队即可。具体方法可以看这里。

    classSendEmail{publicfunctionfire($job,$data){//$job->delete();}}Queue::push('SendEmail@send',array('message'=>$message));

    流程

    Laravel利用artisan命令来执行出队操作,然后进行任务的执行。方法调用如下:

    artisan queue:work

    WorkerCommand:fire()

    Worker:pop()

    Worker:getNextJob()

    RedisQueue:pop()

    Worker:process()

    我遇到的问题就在这里,在RedisQueue:pop()方法中,有这样一句:

    $this->redis->zadd($queue.':reserved',$this->getTime()+60,$job);

    这里将当前执行的任务放到另外一个reserved队列中,超时时间是60s。也就是说,如果60s后这个任务没有被删除掉,则任务会重新被放入队列中来。因此,在实际的使用过程中,任务很可能被多次执行。解决的办法是

    classSendEmail{publicfunctionfire($job,$data){$job->delete();// job }}

    即先删除这个任务,再开始执行任务

    展开全文
  • 一.配置队列配置文件存放在config/queue.php 。...其中还包含了一个 null 队列驱动以拒绝队列任务。默认是sync,即同步的,直接处理,无队列.要将其修改为对应的类型,如database等二.依赖1.数据库依赖为了使...

    一.配置

    队列配置文件存放在config/queue.php 。在该文件中你将会找到框架自带的每一个队列驱动的连接配置,包括数据库、Beanstalkd、 IronMQ、 Amazon SQS、 Redis 以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动以拒绝队列任务。

    默认是sync,即同步的,直接处理,无队列.要将其修改为对应的类型,如database等

    二.依赖

    1.数据库依赖

    为了使用database 队列驱动,需要一张数据库表来存放任务,要生成创建该表的迁移,运行 Artisan 命令queue:table ,迁移被创建好了之后,使用migrate 命令运行迁移:

    php artisan queue:table

    php artisan migrate

    2.其他队列类型依赖

    下面是以上列出队列驱动需要安装的依赖:

    • Amazon SQS: aws/aws-sdk-php ~3.0

    • Beanstalkd: pda/pheanstalk ~3.0

    • IronMQ: iron-io/iron_mq ~2.0

    • Redis: predis/predis ~1.0

    三.生成任务类

    1.默认情况下,应用的所有队列任务都存放在app/Jobs 目录。你可以使用 Artisan CLI 生成新的队列任务:

    php artisan make:job SendReminderEmail --queued

    该命令将会在app/Jobs 目录下生成一个新的类,并且该类实现了Illuminate\Contracts\Queue\ShouldQueue接口,--queued告诉 Laravel 该任务应该被推送到队列而不是同步运行。

    2.SendReminderEmail.php代码如下:

    namespace App\Jobs;

    use Illuminate\Support\Facades\Log;

    use App\Jobs\Job;

    use Illuminate\Queue\SerializesModels;

    use Illuminate\Queue\InteractsWithQueue;

    use Illuminate\Contracts\Bus\SelfHandling;

    use Illuminate\Contracts\Queue\ShouldQueue;

    use App\Models\User;

    class SendReminderEmail extends Job implements SelfHandling, ShouldQueue

    {

    use InteractsWithQueue, SerializesModels;

    protected $user;

    /**

    * Create a new job instance.

    *

    * @return void

    */

    public function __construct(User $user)

    {

    $this->user = $user;

    }

    /**

    * 处理任务.

    *

    * @return void

    */

    public function handle()

    {

    Log::alert('我是来自队列,发送了一个邮件',['id' => $this->user->id, 'name' => $this->user->name]);

    }

    }

    3.任务发生异常

    a.任务在处理的时候发生异常,任务将被放回队列.在下一次再被处理

    b.判断同一任务失败的次数

    $this->attempts() // 返回失败次数

    $this->release(50); // 将任务放回到队列,50秒后次执行

    四.推送任务

    1.控制器中:

    $user = Auth::user();

    $this->dispatch((new SendReminderEmail($user))->delay(60)); //delay表示延迟队列执行

    // 也可以将任务推送到不同的队列中

    $this->dispatch((new SendReminderEmail($user))->onQueue('jobs'));

    // 也可以从请求中分发任务

    $this->dispatchFrom('App\Jobs\ProcessOrder', $request, [附加的参数]);

    2.其他地方使用

    use DispatchesJobs;

    ......

    $this->dispatch()

    五.启动队列监听

    1.基本命令

    php artisan queue:listen connection_name --queue=queue_name

    php artisan queue:listen connection //指定连接,也就是不同队列类型,如database,redis,在queue.php中配置

    php artisan queue:listen --queue=high,low //指定队列优先级,比如有限处理某队列,多个队列用,分割

    php artisan queue:listen --timeout=60 //每个任务运行最大时间不超过60秒

    php artisan queue:listen --sleep=5 //没有任务的时候休眠5秒

    php artisan queue:listen --tries=3 //失败任务尝试3次

    queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;

    queue:listen 监听队列请求,只要运行着,就能一直接受请求,除非手动终止;

    2.作为系统进程运行

    Supervisor

    Supervisor 配置文件通常存放在/etc/supervisor/conf.d 目录,在该目录中,可以创建多个配置文件指示 Supervisor 如何监视进程,例如,让我们创建一个开启并监视queue:work 进程的laravel-worker.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 --daemon

    autostart=true

    autorestart=true

    user=forge

    numprocs=8

    redirect_stderr=true

    stdout_logfile=/home/forge/app.com/worker.log

    在本例中, numprocs 指令让 Supervisor 运行 8 个queue:work 进程并监视它们,如果失败的话自动重启。配置文件创建好了之后,可以使用如下命令更新 Supervisor 配置并开启进程:

    sudo supervisorctl reread

    sudo supervisorctl update

    sudo supervisorctl start laravel-worker:*

    3.后台队列(守护进程)

    Artisan 命令queue:work 包含一个--daemon 选项来强制队列 worker 持续处理任务而不必重新启动框架。相较于queue:listen 命令该命令对 CPU 的使用有明显降低:

    php artisan queue:work connection --daemon

    php artisan queue:work connection --daemon --sleep=3

    php artisan queue:work connection --daemon --sleep=3 --tries=3

    正如你所看到的, queue:work 任务支持大多数queue:listen 中有效的选项。你可以使用php artisan help queue:work 任务来查看所有有效选项。

    注意点:

    1.后台队列 worker 在处理每个任务时不重启框架,因此,你要在任务完成之前释放资源,举个例子,如果你在使用 GD 库操作图片,那么就在完成时使用imagedestroy 释放内存。类似的,数据库连接应该在后台长时间运行完成后断开,你可以使用DB::reconnect 方法确保获取了一个新的连接。

    2.如果修改了代码,在后台队列中是无效的,必须重启队列

    php artisan queue:restart

    这个命令依赖于缓存系统重启进度表,默认情况下,APC 在 CLI 任务中无法正常工作,如果你在使用 APC,需要在 APC 配置中添加apc.enable_cli=1 。

    六.处理失败任务

    1.创建一个 failed_jobs 表的迁移

    php artisan queue:failed-table

    2.生成表

    php artisan migrate

    3.加重试次数限制

    php artisan queue:listen connection-name --tries=3

    超过3次的任务将被移到failed_jobs表

    4.也可以手动删除一个任务

    if ($this->attempts() == 1) {

    $this->delete();

    }

    5.添加失败任务事件

    a.AppServiceProvider中添加

    /**

    * 启动应用服务

    *

    * @return void

    */

    public function boot()

    {

    Queue::failing(function ($connection, $job, $data) {

    // Notify team of failing job...

    });

    }

    b.在任务类中添加

    /**

    * 执行任务

    *

    * @param Mailer $mailer

    * @return void

    */

    public function handle(Mailer $mailer)

    {

    //

    }

    /**

    * 处理失败任务

    *

    * @return void

    */

    public function failed()

    {

    // Called when the job is failing...

    }

    6.重试失败任务

    a.查看失败的任务

    php artisan queue:failed

    b.重新执行失败任务

    php artisan queue:retry 5 //重新执行id为5的失败任务

    c.删除失败任务

    php artisan queue:forget 5 //删除id为5的失败任务

    d.删除所有任务

    php artisan queue:flush

    总体而言,任务和事件的相同之处都是需要触发/推送;不同之处可能在于,任务一般是耗时操作,放入队列较好;事件一般不是耗时操作,当然事件也可以是耗时操作,也能放入队列.

    展开全文
  • 注意:本地安装配置redis扩展,且已经启动redis1、创建队列任务:php artisan make:job CloseOrder2、CloseOrder.php:namespaceApp\Jobs;useIlluminate\Bus\Queueable;useIlluminate\Queue\SerializesModels;use...

    异步队列:可以大幅度缩短 Web 请求和响应的时间。

    注意:本地安装配置redis扩展,且已经启动redis

    1、创建队列任务:

    php artisan make:job CloseOrder

    2、CloseOrder.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\Services\Facades\Api\Order\OrderService;

    class CloseOrder implements ShouldQueue

    {

    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $order;//订单信息

    public function __construct($order, $delay)

    {

    $this->order = $order;

    // 设置延迟的时间,delay() 方法的参数代表多少秒之后执行

    $this->delay($delay);

    }

    // 当队列处理器从队列中取出任务时,会调用 handle() 方法

    public function handle()

    {

    // 判断对应的订单是否已经被支付

    // 如果已经支付则不需要关闭订单,直接退出

    if ($this->order['order_status']!=1) {

    return;

    }

    //处理业务逻辑,更改订单状态,更新商品库存等

    //处理失败异常抛出

    throw new \Exception('取消订单失败:单号:'.$this->order['order_no']);

    }

    }

    3、队列调用:

    use App\Jobs\CloseOrder;

    dispatch(new CloseOrder($orderData, 30 * 60));//30分钟后自动取消订单

    4、更改异步驱动:

    在laravel生成的.env文件中将队列驱动由同步sync改为redis

    QUEUE_CONNECTION=redis

    5、安装predis/predis包

    使用redis异步驱动,需要安装predis/predis包

    composer require predis/predis

    6、启动队列

    php artisan queue:work

    调用方法:

    dispatch_now(new CloseOrder($orderData));//立即异步执行方法

    dispatch(new CloseOrder($orderData, 30 * 60));//延迟30分钟后执行方法

    失败任务处理:

    将失败的任务记录到数据库,命令如下:

    php artisan queue:failed-table

    php artisan migrate

    设置最大尝试次数:

    php artisan queue:work redis --tries=3

    任务失败后,将最大执行3次,3次后失败任务记录到数据库中、

    重新尝试失败任务:

    查看失败任务:

    php artisan queue:failed

    执行命令后将会列出任务 ID ,队列,以及失败的时间。

    尝试单个任务:php artisan queue:retry 任务ID

    尝试所有失败任务:php artisan queue:retry all

    删除失败任务:

    删除单个失败任务:php artisan queue:forget 任务ID

    删除所有失败任务:php artisan queue:flush

    监听任务队列:

    php artisan queue:listen

    启动队列守护进程:

    安装Supervisor

    展开全文
  • 最近项目需求,研究了laravel的异步队列。官方文档虽然很是详细,但也有些晦涩难懂,在此记录下步骤,供大家参考。1、修改/config/queue.php文件| Default Queue Connection Name|---------------------------------...

    最近项目需求,研究了laravel的异步队列。官方文档虽然很是详细,但也有些晦涩难懂,在此记录下步骤,供大家参考。

    1、修改/config/queue.php文件

    | Default Queue Connection Name

    |--------------------------------------------------------------------------

    |

    | Laravel's queue API supports an assortment of back-ends via a single

    | API, giving you convenient access to each back-end using the same

    | syntax for every one. Here you may define a default connection.

    |*/

    'default' => env('QUEUE_CONNECTION', 'sync'),

    /*|--------------------------------------------------------------------------

    | Queue Connections

    |--------------------------------------------------------------------------

    |

    | Here you may configure the connection information for each server that

    | is used by your application. A default configuration has been added

    | for each back-end shipped with Laravel. You are free to add more.

    |

    | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"

    |*/

    'connections' =>['sync' =>['driver' => 'sync',],

    'database' =>['driver' => 'database',

    'table' => 'jobs',

    'queue' => 'default',

    'retry_after' => 90,],

    'beanstalkd' =>['driver' => 'beanstalkd',

    'host' => 'localhost',

    'queue' => 'default',

    'retry_after' => 90,

    'block_for' => 0,],

    'sqs' =>['driver' => 'sqs',

    'key' => env('AWS_ACCESS_KEY_ID'),

    'secret' => env('AWS_SECRET_ACCESS_KEY'),

    'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),

    'queue' => env('SQS_QUEUE', 'your-queue-name'),

    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),],

    'redis' =>['driver' => 'redis',

    'connection' => 'default',

    'queue' => env('REDIS_QUEUE', 'default'),

    'retry_after' => 90,

    'block_for' => null,],],

    /*|--------------------------------------------------------------------------

    | Failed Queue Jobs

    |--------------------------------------------------------------------------

    |

    | These options configure the behavior of failed queue job logging so you

    | can control which database and table are used to store the jobs that

    | have failed. You may change them to any database / table you wish.

    |*/

    'failed' =>['database' => env('DB_CONNECTION', 'mysql'),

    'table' => 'failed_jobs',],];

    View Code

    注意:修改.env文件如下参数,设置队列连接默认为数据库连接

    QUEUE_CONNECTION=database

    2、新建/app/Job/EmailJob.php,此文件为队列主文件

    namespace App\Job;useIlluminate\Bus\Queueable;useIlluminate\Contracts\Queue\ShouldQueue;useIlluminate\Foundation\Bus\Dispatchable;useIlluminate\Queue\InteractsWithQueue;useIlluminate\Queue\SerializesModels;use Illuminate\Support\Facades\Log;useApp\Service\EmailService;class EmailJob implementsShouldQueue

    {use Dispatchable, InteractsWithQueue, Queueable,SerializesModels;private $content,$to;public function __construct($content,$to){$this->content=$content;$this->to=$to;

    }public functionhandle(){$res=false;$times=0;while($res!==true && $times<3){try{$times++;$res=EmailService::send($this->content,$this->to);

    }catch (\Exception $e){Log::error(date('Y-m-d h:i:s',time()).' send email error:'.$e->getMessage());

    }

    }if($res===true){Log::info(date('Y-m-d h:i:s',time()).' send email success:');

    }

    }

    }

    View Code

    3、新建/app/Service/EmailJobService.php服务,此文件为封装服务文件,可以不用,直接在使用的地方调用队列。

    namespace App\Service;useApp\Job\EmailJob;classEmailJobService

    {public static function add($content,$to){$job=new EmailJob($content,$to);

    dispatch($job);

    }

    }

    View Code

    4、打开终端切换目录进入Laravel项目根目录,执行如下命令,创建队列任务需要的数据表。

    php artisan queue:table

    php artisan queue:failed-table

    php artisan migrate

    5、通过下面这条指令启动队列监听服务,它会自动处理 jobs 表中的队列任务。

    php artisan queue:listen

    监听指定队列:

    php artisan queue:work --queue=default,mytask --tries=2

    这是监听 default和mytask两个队列,区分先后顺序。

    6、如果需要在linux中后台运行,有两种方法:

    6.1 执行如下命令:

    nohup php artisan queue:listen > /tmp/artisan.log 2>&1 &

    6.2.1 安装Supervisor,我的服务器系统为CentOs7.5,所以使用yum安装。

    yum install supervisor

    6.2.2 在/etc/supervisord.d下新建ini文件,eg:laraver-worker.ini,设置自动运行命令等相关参数

    [program:laravel-worker]

    process_name=%(program_name)s_%(process_num)02d

    command=php 这里需要写项目目录/artisan queue:work --sleep=3 --tries=3autostart=trueautorestart=trueuser=root

    numprocs=8stdout_logfile=/root/queue/daily_english_queue.log

    View Code

    6.2.3 启动supervisor,laravel队列监听进程便在后台运行了。

    supervisord -c /etc/supervisord.conf

    6.2.4 配置supervisor开机启动(否则服务器重启后必须手动启动supervisor)

    cd /usr/lib/systemd/system/ //切换目录

    touch supervisord.service //新建文件

    vim supervisord.service //编辑文件

    文件内容:

    [Unit]

    Description=Supervisor daemon

    [Service]

    Type=forking

    ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf

    ExecStop=/usr/bin/supervisorctl shutdown

    ExecReload=/usr/bin/supervisorctl reload

    KillMode=process

    Restart=on-failure

    RestartSec=42s

    [Install]

    WantedBy=multi-user.target

    设置开机启动

    systemctl enable supervisord

    验证是否设置成功

    systemctl is-enabled supervisord

    7、注意:如果修改了job内的代码(包括job调用的方法类),需要重启queue。

    php artisan queue:restart

    Enjoy it !

    展开全文
  • 上篇教程发布后,有同学反馈消息队列的优先级怎么实现,Laravel 本身对此提供了支持,除此之外,Laravel队列组件还支持批处理、延迟推送、失败任务处理、消息队列中间件、频率限制等很多特性,一篇教程根本介绍不...
  • laravel Queue原理:类似写一个死循环的脚本在Linux系统持续运行,新的队列任务push到这个脚本中。场景:一种是高并发的情况,一种是耗时的操作,可以将任务放到队列中去,消费者从队列任务执行,当然还有失败的...
  • 在实际的项目开发中,我们经常会遇到需要轻量级队列的情形,例如发短信、发邮件等,这些任务不足以使用 kafka、RabbitMQ 等重量级的消息队列,但是又的确需要异步、重试、并发控制等功能。通常来说,我们经常会使用 ...
  • 1、设置队列驱动可在config/queue.php...'database',2、创建一个数据表来记住任务phpartisanqueue:tablephpartisanmigrate执行命令后,数据库会自动创建一个jobs的数据表3、生成任务类phpartisanmake:jobSendMessage...
  • 可使用redis和table做为队列使用,我这里使用了邮件发送队列使用database创建表php artisan queue:table会创建一张Jobs表的迁移文件php artisan migrate执行迁移文件会有报错,jobs 表queue字段没有设置长度因为他是...
  • 对列作用队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短Web请求和相应的时间。队列进程原理:写一个死循环的脚本在Linux系统持续运行,新的队列任务push到这个脚本中。一、配置队列 配置文件存放...
  • 打造高性能laravel队列队列作用 队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短Web请求和相应的时间。 队列进程原理:写一个死循环的脚本在Linux系统持续运行,新的队列任务push到这个脚本中。...
  • 1.想使用Redis作为队列的驱动,先通过宝塔安装redis2.安装好redis,需要配置3....把队列连接设置为redis,修改.env文件...创建队列任务类:php artisan make:job DownloadFiles这样会生成一个类文件:6.类文件:&a...
  • php中文网最新课程每日17点准时技术干货分享Laravel 8 附带了很酷的新特性,并对队列系统的一些更改。在本文中,我们将研究这些特性和更改。变化Backoff (回退)已将retryAfter()方法和retryAfter排队作业,邮件,...
  • Laravel 8 附带了很酷的新特性,并对队列系统的一些更改。在本文中,我们将研究这些特性和更改。变化Backoff (回退)已将retryAfter()方法和retryAfter排队作业,邮件,通知和侦听器的属性重命名为backoff。...
  • Laravel 队列系统实现及使用教程由 学院君 创建于2年前, 最后更新于 9个月前版本号 #248088 views10 likes0 collects简介注:Laravel 现在提供了基于 Redis 的,拥有美观的后台和配置系统的 Horizon 队列扩展包,...
  • 1. 队列任务自启动接下来我们还需要在服务器上配置 Supervisor 来启动 Horizon。Supervisor 是一款进程管理工具,通过配置可以实现自动监听进程状态,如果被监听的进程发生异常退出,Supervisor 会尝试再次启动该...
  • laravel 队列有多种驱动可以选择,这里就使用 redis。创建队列使用 php artisan make:job BrowseLogQueue 即可创建队列文件,最终生成 Jobs/BrowseLogQueue.php 文件功能只是数据入库,代码很简单。需要注意的是,...
  • 1、使用mysql作为队列,需要先将mysql配置好2、首先查看一下config目录下的queue配置发现'default' => env('QUEUE_DRIVER', 'sync')为了使用mysql队列,我们修改配置.env文件设置QUEUE_DRIVER=database3、修改...
  • 队列简介laravel队列服务对各种不同的后台队列服务提供了统一的 API。队列允许你延迟执行消耗时间的任务,比如发送一封邮件。这样可以有效的降低请求响应的时间。配置队列的配置文件被存储在 config/queue.php 中...
  • 一边把任务放到队列中,一边从队列中读取处理任务。我们看一下laravel中对队列的设计,首先是接口的设计在\Illuminate\Contracts\Queue\Queue相关的接口被我用虚线分成了3类,第一类是push,也就是入站。第二类是pop...
  • Laravel 队列系列 —— 基于 Redis 实现任务队列的基本配置和使用由 学院君 创建于5年前, 最后更新于 8个月前版本号 #21、概述在Web开发中,我们经常会遇到需要批量处理任务的场景,比如群发邮件、秒杀资格获取等,...
  •  推入到队列中 可以在 队列窗口中 看到[2018-09-27 07:36:56] Processing: App\Jobs\UpdateUserNameJob [2018-09-27 07:36:56] Processed: App\Jobs\UpdateUserNameJob vagrant@homestead:~/study$ ...
  • 目录StartupComposercomposer create-project laravel/laravel queue-and-schedule --prefer-dist "5.5.*"cd queue-and-scheduleControllerphp artisan make:controller FenceAlarmsControllervim app/...
  • php artisan make:job SynUser4.在队列类里面的handle方法中写上业务逻辑(比如发送网络请求,发送邮件等等,这里简单写个日志代替)protected $message;/*** Create a new job instance.** @return void*/public ...
  • Laravel队列系统介绍简介{tip} Laravel 现在为你的 Redis 队列 提供了 Horizon,一个漂亮的仪表盘和配置系统。查看完整的 Horizon 文档 了解更多信息。Laravel 队列为不同的后台队列服务提供统一的 API,例如 ...
  • 本文通过源码分析给大家介绍了关于 Laravel 重复执行同一个队列任务的原因,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。发现问题在 Laravel 中使用 Redis 处理队列任务,框架提供...
  • Job-Queue 任务-队列的应用场景,是将耗时的任务延时(异步)处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间。1,队列1.1 连接和队列 connection 和 queue在配置文件config/queue.php有一个connections配置...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 488
精华内容 195
关键字:

laravel任务队列