最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Laravel隊列實現(xiàn)原理解決問題記錄

 更新時間:2017年08月19日 20:10:04   作者:Dr點燃  
本篇文章主要介紹了淺談Laravel隊列實現(xiàn)原理解決問題記錄,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

問題

公司項目使用Laravel的開發(fā)的兩個項目在同一個測試服務(wù)器部署,公用同一個redis。在使用laravel中的隊列時,產(chǎn)生沖突干擾。

查找問題原因

在laravel 隊列的操作類Illuminate\Queue\RedisQueue.php中可以看到pushRaw()方法:

// 將一任務(wù)推入隊列中
public function pushRaw($payload, $queue = null, array $options = [])
  {
    $this->getConnection()->rpush($this->getQueue($queue), $payload);

    return Arr::get(json_decode($payload, true), 'id');
  }

從該方法中可以看出Lrarvel隊列的redis實現(xiàn)是通過list結(jié)構(gòu)實現(xiàn)的,rpush(key, value)是將value推入鍵值為key的redis隊列,key的值則是通過$this->getQueue($queue) 獲取到的

protected function getQueue($queue)
  {
    return 'queues:'.($queue ?: $this->default);
  }

所以的redis中l(wèi)ist中的key是 'queues:'.($queue ?: $this->default);拼接的,$this->default 的值是 RedisQueue 實例化的時候從config\queue.php配置中加載的 'queue' => 'default',$queue 是添加隊列時$this->dispatch( new jobClass()->onQueue($queue) )傳入的。

// config\queue.php 文件中的redis配置部分
'redis' => [
      'driver'   => 'redis',
      'connection' => 'default',
      'queue'   => 'default',
      'expire'   => 60,
    ],

至此,兩個項目的隊列沖突原因就找到了。因為redis隊列配置中 'queue' => 'default' 都使用的默認的default,所以當共用redis時,默認的隊列l(wèi)ist 都是'queue:default',所以導致了沖突。

因為隊列監(jiān)聽 監(jiān)聽的隊列名稱是由 --queue參數(shù)決定的,如果不傳就是我們上面設(shè)置的默認值,若傳了就會根據(jù)傳入的隊列名從前往后優(yōu)先依次處理,具體見代碼Illuminate\Queue\Worker.php中:

protected function getNextJob($connection, $queue)
  {
    if (is_null($queue)) {
      return $connection->pop();
    }

    foreach (explode(',', $queue) as $queue) {
      if (! is_null($job = $connection->pop($queue))) {
        return $job;
      }
    }
  }

$queue就是--queue=傳入的參數(shù),當 $queue不存在是直接調(diào)用$connection->pop()當參數(shù)存在時會將參數(shù)解析,優(yōu)先處理排在前面的隊列名稱,將隊列名稱傳入pop($queue), pop()會嘗試從指定隊列或默認隊列中獲取隊列任務(wù)

// Illuminate\Queue\RedisQueue.php
public function pop($queue = null)
  {
    $original = $queue ?: $this->default;

    $queue = $this->getQueue($queue);

    if (! is_null($this->expire)) {
      $this->migrateAllExpiredJobs($queue);
    }

    $job = $this->getConnection()->lpop($queue);

    if (! is_null($job)) {
      $this->getConnection()->zadd($queue.':reserved', $this->getTime() + $this->expire, $job);

      return new RedisJob($this->container, $this, $job, $original);
    }
  }

至此搞清了隊列執(zhí)行的原理。

解決方法

將queue的配置文件中默認隊列修改為不同的名稱,比如: 'queue' => laravel1','queue' => laravel2'。

隊列監(jiān)聽 php artisan queue:listen redis --queue=laravel1,syncExpress

最后

遇到問題,莫要病急亂投醫(yī)。從代碼入手,分析理解實現(xiàn)原理,找對點,解決方法也許很簡單,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • thinkPHP實現(xiàn)的省市區(qū)三級聯(lián)動功能示例

    thinkPHP實現(xiàn)的省市區(qū)三級聯(lián)動功能示例

    這篇文章主要介紹了thinkPHP實現(xiàn)的省市區(qū)三級聯(lián)動功能,詳細分析了thinkPHP實現(xiàn)省市區(qū)三級聯(lián)動功能的詳細步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • Yii2針對指定url的生成及圖片等的引入方法小結(jié)

    Yii2針對指定url的生成及圖片等的引入方法小結(jié)

    這篇文章主要介紹了Yii2針對指定url的生成及圖片等的引入方法,針對常用的URL格式及圖片路徑操作結(jié)合實例進行了對比分析,需要的朋友可以參考下
    2016-07-07
  • yii2-GridView在開發(fā)中常用的功能及技巧總結(jié)

    yii2-GridView在開發(fā)中常用的功能及技巧總結(jié)

    本篇文章主要介紹了yii2-GridView在開發(fā)中常用的功能及技巧總結(jié),數(shù)據(jù)網(wǎng)格或者說 GridView 小部件是Yii中最強大的部件之一。有興趣的可以了解一下。
    2017-01-01
  • ThinkPHP獨立分組使用的注意事項

    ThinkPHP獨立分組使用的注意事項

    這篇文章主要介紹了ThinkPHP獨立分組使用的注意事項,針對獨立分組的目錄結(jié)構(gòu)與分組之間的相互調(diào)用進行了較為深入的分析,并指出了使用時的注意事項,需要的朋友可以參考下
    2014-11-11
  • Laravel 前端資源配置教程

    Laravel 前端資源配置教程

    今天小編就為大家分享一篇Laravel 前端資源配置教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • php arsort 數(shù)組降序排序詳細介紹

    php arsort 數(shù)組降序排序詳細介紹

    php arsort函數(shù)用于將數(shù)組中的元素按照降序進行排序,如果排序成功則返回true,否則返回false,本文章向大家講解arsort函數(shù)的基本語法及使用實例,需要的朋友可以參考下
    2016-11-11
  • 新浪SAE搭建PHP項目教程

    新浪SAE搭建PHP項目教程

    這篇文章主要介紹了新浪SAE搭建PHP項目教程,圖文并茂,需要的朋友可以參考下
    2015-01-01
  • php集成動態(tài)口令認證

    php集成動態(tài)口令認證

    這篇文章主要為大家詳細介紹了php集成動態(tài)口令認證,動態(tài)口令采用一次一密、用過密碼作廢的方式來提高安全性能,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Laravel框架集成UEditor編輯器的方法圖文與實例詳解

    Laravel框架集成UEditor編輯器的方法圖文與實例詳解

    這篇文章主要介紹了Laravel框架集成UEditor編輯器的方法,結(jié)合圖文與實例形式詳細分析了Laravel框架整合集成UEditor編輯器的相關(guān)操作步驟與具體實現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04
  • Laravel服務(wù)容器綁定的幾種方法總結(jié)

    Laravel服務(wù)容器綁定的幾種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Laravel服務(wù)容器綁定的幾種方式,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Laravel具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-06-06

最新評論

宁阳县| 彩票| 搜索| 都匀市| 高淳县| 苗栗县| 青神县| 土默特左旗| 十堰市| 林周县| 丰镇市| 江源县| 海林市| 泉州市| 青浦区| 东平县| 赤峰市| 新宾| 麻栗坡县| 万荣县| 西乌| 高陵县| 视频| 乐至县| 莲花县| 河津市| 册亨县| 霍林郭勒市| 合肥市| 西安市| 新巴尔虎右旗| 赣榆县| 广南县| 原阳县| 碌曲县| 平昌县| 临漳县| 黔江区| 体育| 双辽市| 临沭县|