Laravel之队列使用浅析_e421083458的博客-CSDN博客_laravel queue reserved


本站和网页 https://blog.csdn.net/e421083458/article/details/70247131 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Laravel之队列使用浅析_e421083458的博客-CSDN博客_laravel queue reserved
Laravel之队列使用浅析
e421083458
于 2017-04-19 22:58:28 发布
9109
收藏
分类专栏:
PHP
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/e421083458/article/details/70247131
版权
PHP
专栏收录该内容
112 篇文章
2 订阅
订阅专栏
最近有朋友有朋友问laravel队列的实现原理和经验,刚好用过所以整理了一下分享给大家。
laravel队列配置参见:http://d.laravel-china.org/docs/5.1/queues
原理分析
创建分发任务方法
class TestController extends Controller
//其他方法
//发送消息
public function SendMessage(Request $request){
...
$this->dispatch((new SendMessage($sendParams))->onQueue('snail:SendMessage'));
内部实现:
创建消费任务
命令行运行如下命令:
/home/niuyufu/php/bin/php /home/niuyufu/webroot/assistant_api/artisan queue:work --queue=snail:SendMessage --tries=3 --memory=512 --daemon
内部实现:
队列消息分析:
监控redis对应队列消息,具体产生的消息操作,如下: tail -f | redis-cli -h 10.94.120.13 -p 6380 monitor | grep “queues:snail”
1492446053.406282 [0 10.95.117.155:57132] “WATCH” “queues:snail:SendMessage:delayed” 1492446053.406452 [0 10.95.117.155:57132] “ZRANGEBYSCORE” “queues:snail:SendMessage:delayed” “-inf” “1492446053” 1492446053.406754 [0 10.95.117.155:57132] “WATCH” “queues:snail:SendMessage:reserved” 1492446053.406842 [0 10.95.117.155:57132] “ZRANGEBYSCORE” “queues:snail:SendMessage:reserved” “-inf” “1492446053” 1492446053.407029 [0 10.95.117.155:57132] “LPOP” “queues:snail:SendMessage” 1492446053.407700 [0 10.95.117.155:57132] “ZADD” “queues:snail:SendMessage:reserved” “1492446113” “{job}” 1492446053.463953 [0 10.95.117.155:57132] “ZREM” “queues:snail:SendMessage:reserved” “{job}”
PS:如果你的redis是codis的话,注意了,因为codis禁用方法列表
KEYS, MOVE, OBJECT, RENAME, RENAMENX, SORT, SCAN, BITOP,MSETNX, BLPOP, BRPOP, BRPOPLPUSH, PSUBSCRIBE,PUBLISH, PUNSUBSCRIBE, SUBSCRIBE, UNSUBSCRIBE, DISCARD, EXEC, MULTI, UNWATCH, WATCH, SCRIPT EXISTS, SCRIPT FLUSH, SCRIPT KILL, SCRIPT LOAD, AUTH, ECHO, SELECT, BGREWRITEAOF, BGSAVE, CLIENT KILL, CLIENT LIST, CONFIG GET, CONFIG SET, CONFIG RESETSTAT, DBSIZE, DEBUG OBJECT, DEBUG SEGFAULT, FLUSHALL, FLUSHDB, INFO, LASTSAVE, MONITOR, SAVE, SHUTDOWN, SLAVEOF, SLOWLOG, SYNC, TIME
所以执行消费任务会有以下错误:
[Predis\Connection\ConnectionException]
Error while reading line from the server. [tcp://100.90.154.39:3000]
解决方法为修改config/queue.php
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'expire' => null, //禁用即可
],
优化日志处理:
如果你的系统有切割文件日志操作。会发现虽然日志被切分了,但程序却没有往新文件里写入。如,2017-04-18 13:50启动的项目,日志会一直打到 snail.log.2017041813上。
改进方案: app/Jobs/Job.php文件中添加如下方法:
public function releaseLoggerFile(){
$handles=\Log::getMonolog()->getHandlers();
if(!is_array($handles) || empty($handles)){
return;
foreach($handles as $handle){
if(method_exists($handle, "close")){
$handle->close();
return;
在具体job实现类中的handle方法结尾添加:
public function handle()
...
$this->releaseLoggerFile(); //释放log文件
线上部署
创建任务shell
#!/bin/sh
day=$(date +'%y%m%d')
now=$(date +"%F %T")
php_command="/home/niuyufu/php/bin/php"
command="/home/niuyufu/webroot/snail_api/artisan"
log="/home/niuyufu/webroot/log/wave"
queue_name_arr=("snail:SendMessage" "snail:SendMessageToApp")
case $1 in
"run")
for queue_name in ${queue_name_arr[*]}
do
count=$(ps aux | grep artisan |grep queue=${queue_name} | grep -v grep | wc -l)
if [ ${count} -lt 1 ];then
echo "${now}:${queue_name} process has exit ${count}\n";
nohup $php_command $command queue:work --queue=${queue_name} --tries=3 --memory=512 --daemon >> $log/queueMonitor.log 2>&1 &
else
echo "${now}:${queue_name} process is runing";
fi
done
;;
"stop")
kill -9 $(ps -ef | grep "queue:work" | grep -v grep | awk '{print $2}' | tr -s '\n' ' ')
echo ${now}."Queue process all stop";
;;
"list")
ps -ef | grep "queue:work" | grep -v grep
;;
*)
echo "
Usage: QueueMonitorCommandShell.sh [run|stop|list]
;;
esac
总结:
laravel这边的延迟队列使用了三个队列。
queue:default:delayed // 存储延迟任务 queue:default // 存储“生”任务,就是未处理任务 queue:default:reserved // 存储待处理任务 任务在三个队列中进行轮转,最后一定进入到queue:default:reserved,并且成功后把任务从这个队列中删除。
laravel5.1 使用了watch来控制队列的原子操作,但由于codis本身不支持 watch 方法。所以使用codis不能完全体验队列功能:延迟队列不支持、不支持数据重跑,对线上数据比较严格操作谨慎使用。
laravel5.3 之后redis队列 开始使用lua脚本支持的队列原子操作,它没有使用 watch multi等操作,所以如果线上codis 支持lua的话,可以完整体验到队列功能。
参考文档: https://laravel-china.org/articles/4169/analysis-of-laravel-message-queue http://laravelacademy.org/post/2012.html
e421083458
关注
关注
点赞
收藏
打赏
评论
Laravel之队列使用浅析
最近有朋友有朋友问laravel队列的实现原理和经验,刚好用过所以整理了一下分享给大家。laravel队列配置参见:http://d.laravel-china.org/docs/5.1/queues原理分析创建分发任务方法
复制链接
扫一扫
专栏目录
Laravel Queue——消息队列任务与分发源码剖析
逐梦先锋的博客
11-08
444
在实际的项目开发中,我们经常会遇到需要轻量级队列的情形,例如发短信、发邮件等,这些任务不足以使用kafka、RabbitMQ等重量级的消息队列,但是又的确需要异步、重试、并发控制等功能。通常来说,我们经常会使用Redis、Beanstalk、Amazon SQS来实现相关功能,laravel为此对不同的后台队列服务提供统一的API,本文将会介绍应用最为广泛的redis队列。
本文...
Laravel Queue——消息队列任务处理器源码剖析
cangqiong_xiamen的博客
08-21
368
运行队列处理器
队列处理器的设置
Laravel 包含一个队列处理器,当新任务被推到队列中时它能处理这些任务。你可以通过 queue:work 命令来运行处理器。要注意,一旦 queue:work 命令开始,它将一直运行,直到你手动停止或者你关闭控制台:
php artisan queue:work
可以指定队列处理器所使用的连接。 php artisan queue:work redis
可以自定义队列处理器,方式是处理给定连接的特定队列。 php artisan queue:work redis -
参与评论
您还未登录,请先
登录
后发表或查看评论
laravel中使用redis的一些基本命令
最新发布
探索者科技的博客
11-12
38
laravel中使用redis的一些基本命令
Yii2 queue的队列使用详解
大鹏
11-13
5036
一.基于redis
1.安装redis ,并进行相关配置
2.yii2 项目中使用composer 安装 yii2-redis
3.yii2 项目中使用compsoer 安装yii2-queue
配置文件设置:
'redis' => [
'class' => \common\components\cache\RedisCache::class,
'hostname' => 'localhost',
'port' => 6379,
'data
laravel 任务队列_laravel queue队列使用
weixin_39853590的博客
12-19
547
一篇文章:laravel中的队列服务跟其他队列服务也没有什么不同,都是最符合人类思维的最简单最普遍的流程:有一个地方存放队列信息,一个PHP进程在运行时将任务写入,另外一个PHP守护进程轮询队列信息,将达到执行要求的任务执行并删除。由于PHP是url驱动的同步语言,本身是阻塞的,所以laravel提供一个守护进程工具来查询并执行队列信息也就不足为奇了。Laravel的queue配置文件是 /app...
Laravel 队列的使用方法
柚子味西瓜的博客
06-24
347
Laravel 队列
Laravel中的队列处理
u010201592的博客
04-02
2480
Laravel中的队列处理队列介绍为什么要有消息队?这里先对其进行一个简单的介绍,方便还不了解的同学理解.在面向对象里,有一个很简单的概念–消息传递,而消息队列就可以在它上面扩展一下,把它说的更通俗些:从执行的角度去看,消息队列把原
来可直接调用的一个函数(一段程序或一个对象)放到另一个进程中了,所以它们之间的消息传递就从直接传递参数变成了以队列为载体来传递所需参数的一种方式.更加详细的介绍可以参
Laravel 队列执行流程
pythonluo的专栏
07-26
2116
执行队列
php artisan queue:work
执行队列过程,从queues:detault:delayed有序集合拿出到期的JOB数据放到queues:detault队列中,然后从首先从queues:detault 队列拿出要执行的JOB数据放入到queues:detault:reserved有序集合中,然后
laravel 这边的延迟队列使用了三个队列。
queue:de...
使用 Laravel Queue
cangqiong_xiamen的博客
08-20
210
背景
首先说一下我写这篇文章的初衷,在我们打算使用 Laravel Queue 的时候,你的首选应该是去看文档,但是无奈 Laravel 的文档很多地方写得太简单,有时候想了解一个深入的问题,不得不去看源码,但是看源码确实费一些时间。
所以我打算写一篇文章,把我在使用 Laravel Queue 过程中的方方面面都写一下,方便新手学习、老司机温习。
因为 Redis Queue 是比较简单也很常用的一种队列,所以以下内容我都基于 Redis Queue。
为什么使用队列?
虽然这个问题不是今天文章的重点,但
Laravel Queue — 生产和消费
程序猿的世界
09-16
1685
公司的日志系统、推送系统,都是用的Laravel自带的Queue系统,之前只是调用大佬封装好的,不知道实现的原理,今天仔细看了看Queue的源码,总结一下,有不严谨和错误的地方,还希望大佬们指正。
生产
首先我们的业务用的是Beantalked,所以代码查看从BeanstalkdQueue.php的push入队(later方法为延迟队列)方法开始
/**
* Push a ne...
laravel队列
九步
04-25
1693
1 环境
Laravel是一种类似ThinkPHP的php框架,封装的诸多功能可以很方便的使用。队列Queue便是其中之一。
Windows环境下,可使用PHPstorm作为Laravel的集成开发环境IDE。
2 队列
Laravel可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config/queue.php)
其中sync为同步,database为使用数据库,后面三种为第三方队列服务
think-queue
JunChow
05-22
311
参考资料
官方文档 https://github.com/coolseven/notes/tree/master/thinkphp-queue
think-queue是ThinkPHP官方提供的一个消息队列服务,是专门支持队列服务的扩展包。think-queue消息队列适用于大并发或返回结果时间比较长且需要批量操作的第三方接口,可用于短信发送、邮件发送、APP推送。think...
laravel 队列
yang_yun_hao的博客
01-09
96
官方文档https://learnku.com/docs/laravel/5.4/queues/1256
1. 在控制器内将将要执行的操作参数入列,入列的队列名,是要执行的文件,与类名一样,大写转小写,单词间用下划线分隔
// 参数1 参数2 对应的队列名称(类名) 执行时间 我这里是在现在...
【已解决】Laravel完成定时Job任务(延时分发任务)【指定时间执行一次某自定义任务】
特别剑的博客
07-27
2414
文章目录前言目标需求开发环境Linux+Nginx+mysql+php7.3+Redis+Laravel 6.2.* + Supervisor管理器(用来做进程守护的工具)数据模型活动表(activity)用户表(userinfo)业务流程代码部分总结
前言
laravel 完成Job定时任务解决php在某一时间执行一次某个自定义任务。
目标需求
已知有多个活动且每个用户只能关注一个活动,活动表与用户表的关系为一对多【即“活动表”一条数据 关联 多条“用户表”数据】。现在要求活动开始前10分钟对关注该活
Laravel队列的用法
qq_41688060的博客
09-04
2106
laravel队列 可分为【同步队列】和【延时队列】两种
一,默认QUEUE_DRIVER=sync 是同步的,使用delay延时队列不能使用同步的,否则不起作用。
要想使用延时队列必须把 QUEUE_DRIVER设置成 redis 或者 datebase 延迟才起作用
二,一般什么情况下会用到延迟队列呢?举个栗子(商城用户生成订单后没有付款三十分钟后取消订单,这个时候用延时队列来处理岂不快哉,或者群发邮件短信等一些耗时的操作时就需要用到延时队列,这样就可以减轻服务器的压力,减少等待时间)
三,创建任务类
thinkphp-queue自带的队列包使用分析
热门推荐
will5451的博客
05-24
4万+
前言当前笔记中的内容针对的是 thinkphp-queue 的 v1.1.2 版本,现在官方已经更新到了 v1.1.3 版本, 下文中提到的几个Bug在最新的master分支上均已修复。 笔记中的部分内容还未更新。传统的程序执行流程一般是 即时|同步|串行的,在某些场景下,会存在并发低,吞吐量低,响应时间长等问题。在大型系统中,一般会引入消息队列的组件,将流程中部分任务抽离出来放入消息队列,并由专...
laravel 队列使用以及遇到的坑
没有用户名的博客
08-02
9662
队列使用:
http://laravelacademy.org/post/3252.html
http://laravelacademy.org/post/6922.html
运行队列监听器
在浏览器中访问http://laravel.app:8000/mail/sendReminderEmail/1,此时任务被推送到Redis队列中,我们还需要在命令行中运行Artisan命令执行队列中的...
Laravel 延迟任务(Delayed Job)功能
weixin_34032827的博客
04-09
4482
当我们的系统触发了一个延迟任务,Laravel会用当前的时间加上任务的延迟时间计算出任务的执行时间戳,然后将这个时间戳和任务信息序列化之后存入队列,,Laravel 的队列处理器会不断查询并执行队列中满足预计执行时间等于或早于当前时间的任务。1. 创建任务我们通过 make:job 命令来创建一个任务: php artian make:job CloseOrder复制代码创建的任务类保存在 app...
Laravel队列的使用
小坚的技术博客
12-03
251
1.命令行执行下面的命令,生成job文件
php artisan make:job 任务名
2.在app/Jobs目录下找到任务文件,在handle()方法中写任务具体代码
3.在控制器中调用该队列的dispatch()方法,相当于往队列添加一个任务
SendEmail::dispatch(); //SendEmail是我的任务文件类名
4.在命令行启动队列
php artisan queue:work
5.在控制器或者其他调用dispatch()方法的地方会往队列插入任务到队列,队列会自动执行,也就
Laravel队列简易使用说明
大炮哥的博客
05-18
507
原文https://learnku.com/docs/laravel/5.8/queues/3923#error-handling
官方的最为详细,这里以最简洁的方式达到使用队列目的
重点流程:
任务创建
任务发布
队列启动(不启动,任务是不会运行的!)
跟着以下步骤做即可:
数据库迁移
php artisan queue:table
php artisan migrate
任务创建
php artisan make:job MyJob
任务执行内容
// 编辑jobs/MyJ
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:像素格子
设计师:CSDN官方博客
返回首页
e421083458
CSDN认证博客专家
CSDN认证企业博客
码龄15年
暂无认证
496
原创
1万+
周排名
7145
总排名
344万+
访问
等级
2万+
积分
2096
粉丝
341
获赞
258
评论
648
收藏
私信
关注
热门文章
nginx负载均衡简单配置
156650
git pull的时候报错:git did not exit cleanly (exit code 1)
122100
keepalived+nginx双机热备+负载均衡
105391
mysql show processlist命令 详解
92222
php 除法取整
66643
分类专栏
iOS开发
2篇
lua使用技巧
6篇
Hibernate技术知识点
10篇
PHP
112篇
杂记
34篇
javascript
31篇
Linux
72篇
DIV+CSS
6篇
数据结构与算法
17篇
Java
166篇
Java Web 开发
6篇
Oracle
10篇
Android
21篇
压力+性能测试
16篇
tomcat
2篇
JBoss
2篇
Mysql
51篇
CXF WebService
3篇
Sqlserver
3篇
Nosql
13篇
Git
3篇
云计算
3篇
HTML5+CSS3
1篇
shell编程
30篇
XMPP
5篇
C、C++
15篇
C#编程
12篇
Lua编程
5篇
Python编程
2篇
Hadoop
5篇
macbook
3篇
golang
18篇
机器学习
1篇
nginx
1篇
Docker
1篇
视频教程
1篇
elasticsearch
最新评论
使用helm快速安装 grafana&prometheus
斜阳cs:
Error: looks like "https://apphub.aliyuncs.com/" is not a valid chart repository or cannot be reached: failed to fetch https://apphub.aliyuncs.com/index.yaml : 504 Gateway Timeout
CRITICAL:yum.cli:Config Error: Error accessing file for config file:///etc/yum.conf
梦中千秋:
[root@VM-0-9-centos yum-3.4.3]# wget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz
--2021-12-23 11:47:35-- http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz
正在解析主机 yum.baseurl.org (yum.baseurl.org)... 2605:bc80:3010:104::8cd3:923
正在连接 yum.baseurl.org (yum.baseurl.org)|2605:bc80:3010:104::8cd3:923|:80... 失败:没有到主机的路由。
keepalived+nginx双机热备+负载均衡
kylelvpc:
验证有用吗?
Gin 入门实战
licheng_god:
后端准备
fork一份gin脚手架程序
https://github.com/e421083458/gin_scaffold
前端准备
下载vue-admin
https://github.com/taylorchen709/vue-admin
安装及设置webstorm
调整webstorm的vue.js插件
https://www.cnblogs.com/ssrsblogs/p/6231981.html
调整webstorm的es6
https://blog.csdn.net/qijuju/article/details/79015073
3-2 实战开发
————————————————
版权声明:本文为CSDN博主「e421083458」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/e421083458/article/details/91994788
哈希表碰撞攻击的基本原理
尘客.:
多谢分享
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
CKA考试笔记,仅做个人学习使用
基于云原生的私有化交付PAAS平台
使用helm快速安装Nightingale夜莺监控系统
2022年13篇
2021年1篇
2020年2篇
2019年7篇
2018年5篇
2017年7篇
2016年10篇
2015年49篇
2014年122篇
2013年313篇
2012年117篇
2011年9篇
目录
目录
分类专栏
iOS开发
2篇
lua使用技巧
6篇
Hibernate技术知识点
10篇
PHP
112篇
杂记
34篇
javascript
31篇
Linux
72篇
DIV+CSS
6篇
数据结构与算法
17篇
Java
166篇
Java Web 开发
6篇
Oracle
10篇
Android
21篇
压力+性能测试
16篇
tomcat
2篇
JBoss
2篇
Mysql
51篇
CXF WebService
3篇
Sqlserver
3篇
Nosql
13篇
Git
3篇
云计算
3篇
HTML5+CSS3
1篇
shell编程
30篇
XMPP
5篇
C、C++
15篇
C#编程
12篇
Lua编程
5篇
Python编程
2篇
Hadoop
5篇
macbook
3篇
golang
18篇
机器学习
1篇
nginx
1篇
Docker
1篇
视频教程
1篇
elasticsearch
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
e421083458
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值