队列如何使用

作者: Yunchao | 来源:发表于2019-07-12 19:22 被阅读9次

Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间。

驱动的必要设置

Database //需要数据表来存储,可以用artisan生成

php artisan queue:table

php artisan migrate

 Redis

为了使用 redis 队列驱动,你需要在 config/database.php 配置文件中配置 Redis 的数据库连接。

创建任务

生成任务类:php artisan make:job ProcessPodcast  // app/Jobs文件夹下

任务类__construct 方法 传递对象属性

任务类handle方法 处理具体任务

分发任务

一旦你写完了你的任务类你就可以使用它自带的 dispatch 方法分发它。传递给 dispatch 方法的参数将会被传递给任务的构造函数:

ProcessPodcast::dispatch($podcast);//分发到配置的default的队列中

ProcessPodcast::dispatch($podcast) ->delay(now()->addMinutes(10));//延时10分钟发布

ProcessPodcast::dispatch($podcast)->onQueue('processing');// 分发任务到指定队列(processing)

ProcessPodcast::dispatch($podcast)->onConnection('sqs');//分发任务到指定连接(sqs)

public $tries = 5;//任务可以尝试的最大次数。

 public function retryUntil(){ return now()->addSeconds(5);}/**  定义任务超时时间 , 在该时间内无限次尝试*/


运行队列处理器

php artisan queue:work //监听所有链接的default队列

php artisan queue:work --once // 执行单一任务

php artisan queue:work redis // 指定连接

php artisan queue:work redis --queue=emails //指定队列

php artisan queue:work --queue=high,low //队列优先级,high 与low 都是队列名

php artisan queue:restart // 重启

php artisan queue:work --sleep=3 //队列进程睡眠时间

如果指定非default的队列,需要执行指定队列的命令来运行


Supervisor 配置

sudo apt-get install supervisor //linux 安装

一般 Supervisor 的配置文件存储在 /etc/supervisor/conf.d 目录

cd /etc/supervisor/conf.d 

vim laravel-worker.conf

//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

autostart=true

autorestart=true

user=forge

numprocs=8

redirect_stderr=true

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

//启动supervisor
sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start laravel-worker:*

sudo supervisorctl reload


处理失败的任务

//使用数据库database

php artisan queue:failed-table

php artisan migrate

相关文章

  • 分布式之消息队列复习精讲

    引言 复习要点 本文大概围绕如下几点进行阐述: 为什么使用消息队列?使用消息队列有什么缺点?消息队列如何选型?如何...

  • 消息队列应用-使用异步队列就解耦了吗

    消息队列作用一文介绍了为什么要使用消息队列。我们再来讨论下如何有效使用消息队列。 消息队列模式 目前主流消息队列主...

  • 分布式之消息队列复习精讲!

    前言 复习要点 本文大概围绕如下几点进行阐述: 为什么使用消息队列? 使用消息队列有什么缺点? 消息队列如何选型?...

  • 消息队列

    为什么使用消息队列?消息队列有什么优点和缺点? 如何保证消息队列高可用?如何保证消息不被重复消费? kafka,a...

  • 关于MQ,你必须知道的

    OK那么消息队列MQ有什么套路呢? 使用消息队列场景和好处 使用消息队列会带来什么问题,有什么解决方案 如何使用M...

  • Android跨进程通信-消息队列

    消息队列的使用和原理 消息队列的创建及其如何使用 我们可以通过msgget()函数来创建消息队列,它会在内核空间创...

  • 消息队列——了解一下

    本文将从以下几点展开 为什么使用消息队列? 消息队列的缺点 消息队列如何选型 RabbitMQ RabbitMQ ...

  • 队列如何使用

    Laravel 队列为不同的后台队列服务提供统一的 API,例如 Beanstalk,Amazon SQS,Red...

  • 什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?

    什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?

  • 消息队列MQ

    使用消息队列场景和好处 使用消息队列会带来什么问题,有什么解决方案 如何使用MQ(以ActiveMQ为例的简单例子...

网友评论

    本文标题:队列如何使用

    本文链接:https://www.haomeiwen.com/subject/gawczftx.html