关于 Laravel Redis 多个进程同时取队列问题详解
2018-01-08 11:35
656 查看
这篇文章主要给大家介绍了关于 Laravel Redis 多个进程同时取队列问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友下面来一起学习学习吧。
前言
最近在工作中遇到了一个问题,开启多个进程处理队列会重复读取 Redis 中队列吗?是否因此导致重复执行任务?下面就来通过示例代码详细介绍下。
使用 Supervisor 监听 Laravel 队列任务,其中 Supervisor 的配置如下:
?
注意:
如下:
?
Laravel 多进程读取队列内容是否会重复
在 Laravel 的某个控制器方法,一次放入多个任务队列:
?
在队列处理的方法打印日志,打印处理的队列的 ID:
app/Jobs/SendFile3.php
?
Laravel 使用 Redis 的 list 作为队列的数据结构,并会为每个队列分配一个 ID,数据结构如下:
?
请求这个控制器路由(或者命令行方式),就可以看到 Redis 中多了很多队列任务了,如图:
这个时候开启 Supervisor 处理队列任务,并查看日志:
?
这 8 个进程并发处理队列,但从打印的日志看,没有出现同样的 ID. 我们再看一下 Laravel 如何使用 Redis 处理队列的。
分析一下 Laravel 队列的处理
Laravel 中入队列方法
?
用的是 Redis 的 rpush 命令。
Laravel 中取队列方法
?
这里用的是 lua 脚本取队列,如下:
?
那么结论是:从 Laravel 的处理方式和打印的日志结果看,即使多个进程读取同一个队列,也不会读取到一样的数据。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
原文链接:https://blog.tanteng.me/2017/12/laravel-supervisor-queue/
来源:http://www.jb51.net/article/131419.htm
前言
最近在工作中遇到了一个问题,开启多个进程处理队列会重复读取 Redis 中队列吗?是否因此导致重复执行任务?下面就来通过示例代码详细介绍下。
使用 Supervisor 监听 Laravel 队列任务,其中 Supervisor 的配置如下:
?
numprocs = 8,代表开启 8 个进程来执行 command 中的命令。
如下:
?
在 Laravel 的某个控制器方法,一次放入多个任务队列:
?
app/Jobs/SendFile3.php
?
?
这个时候开启 Supervisor 处理队列任务,并查看日志:
?
分析一下 Laravel 队列的处理
Laravel 中入队列方法
?
Laravel 中取队列方法
?
?
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
原文链接:https://blog.tanteng.me/2017/12/laravel-supervisor-queue/
来源:http://www.jb51.net/article/131419.htm
相关文章推荐
- 关于 Laravel Redis 多个进程同时取队列问题详解
- 关于expdp在服务器上同时只能有一个进程在执行的问题
- 关于Laravel Service Provider开发设置延迟加载时遇到的问题详解
- 关于子窗口关闭同时刷新父窗口问题详解
- Laravel中用Redis来做任务队列---出现重载问题
- 多进程同时从消息队列取消息的问题
- 关于病毒模块插入系统、应用程序进程的问题
- 关于病毒模块插入系统、应用程序进程的问题
- ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
- 关于病毒模块插入系统、应用程序进程的问题
- 关于线程和进程的同步问题
- 关于w3wp进程占用过多cpu的问题
- ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
- 关于XP进程问题
- 关于asp.net页面同时使用ajax控件和Freetextbox控件的问题!
- 关于Tomcat与MySQL连接池问题的详解
- 关于系统进程lsass.exe的病毒问题
- 关于线程和进程的同步问题
- 关于mscorsvw.exe进程的问题
- 关于Exchange server 2003和inetinfo.exe进程的问题