Laravel队列的实现原理是什么

  介绍

本篇文章为大家展示了Laravel队列的实现原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>查找问题原因

在Laravel队列的操作类队列<代码>照亮\ \ RedisQueue.php> pushRaw() 方法:

//,将一任务推入队列中   public  function  pushRaw(有效载荷美元,,queue =, null,, array  options 美元;=,[])   {才能   ,,,这个→美元getConnection ()→rpush ($ this→getQueue(队列)美元,美元有效负载);      ,,,return 加勒比海盗:获得(json_decode(负载美元,,真的),,& # 39;id # 39;);   以前,,}

从该方法中可以看出Lrarvel队列的复述,实现是通过列表结构实现的,<代码> rpush(键值)是将价值推入键值为关键的复述,队列,关键的值则是通过<代码> $ this→getQueue(队列)获取到的

protected  function  getQueue(队列)美元   {才能   ,,,return  & # 39;队列:& # 39;。(queue 美元;?:$ this→默认);   以前,,}

所以的复述中列表中关键的是<代码> & # 39;队列:& # 39;。(队列美元?:$→默认);拼接的,<代码> $ this→默认> RedisQueue 实例化的时候从<代码>配置\队列。php代码配置中加载的<代码> & # 39;队列# 39;=比;& # 39;默认# 39;> $ this→调度(新jobClass ()→onQueue(队列)美元)传入的。

//,配置\ queue.php 文件中的复述,配置部分   & # 39;复述,,,=祝辞,(   ,,,,,& # 39;司机# 39;,,,=祝辞,& # 39;复述,# 39;   ,,,,,& # 39;连接# 39;,=祝辞,& # 39;默认# 39;   ,,,,,& # 39;队列# 39;,,,=祝辞,& # 39;默认# 39;   ,,,,,& # 39;到期# 39;,,,=祝辞,60岁,   ,,,,

至此,两个项目的队列冲突原因就找到了。因为复述队列配置中<代码> & # 39;队列# 39;=比;& # 39;默认# 39;>

因为队列监听监听的队列名称是由——队列参数决定的,如果不传就是我们上面设置的默认值,若传了就会根据传入的队列名从前往后优先依次处理,具体见代码队列<代码>照亮\ \工人。php代码中:

protected  function  getNextJob(连接,美元,美元队列)   {才能   ,,,if  (is_null(队列)美元),{   ,,,,,return 连接→美元pop ();   ,,,}      ,,,foreach (爆炸(& # 39;& # 39;,,美元队列),as 美元队列),{   ,,,,,if  (!, is_null ($ job =,连接→美元流行(队列)美元)),{   ,,,,,,,return 美元工作;   ,,,,,}   ,,,}   以前,,}

队列就美元是——队列=传入的参数,当美元队列不存在是直接调用<代码>连接→美元pop() 当参数存在时会将参数解析,优先处理排在前面的队列名称,将队列名称传入<代码>流行(队列)美元,pop() 会尝试从指定队列或默认队列中获取队列任务

//,照亮\ \ RedisQueue.php队列   public  function 流行(queue 美元;=,null)   {才能   ,,,original 美元;=,queue 美元;吗?,这比美元;违约;      ,,,queue 美元;=,$ this→getQueue队列($);      ,,,if  (!, is_null ($ this→到期),{   ,,,,,这个→美元migrateAllExpiredJobs队列($);   ,,,}      ,,,job 美元;=,$ this→getConnection ()→lpop队列($);      ,,,if  (!, is_null(工作)美元),{   ,,,,,这个→美元getConnection ()→zadd($队列# 39;公司:保留# 39;,,这→美元取得时间(),+,这→美元到期,,美元工作);      ,,,,,return  new  RedisJob ($ this→容器,,,美元,美元的工作,,原来美元);   ,,,}   以前,,}

至此搞清了队列执行的原理。

<强>解决方法

将队列的配置文件中默认队列修改为不同的名称,比如:& # 39;队列# 39;=比;laravel1& # 39; & # 39;队列# 39;=比;laravel2& # 39; .

队列监听<代码> php工匠队列:听复述,队列=laravel1 syncExpress

上述内容就是Laravel队列的实现原理是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

Laravel队列的实现原理是什么