久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

淺談Laravel隊(duì)列實(shí)現(xiàn)原理解決問(wèn)題記錄

本篇文章主要介紹了淺談Laravel隊(duì)列實(shí)現(xiàn)原理解決問(wèn)題記錄,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

問(wèn)題

公司項(xiàng)目使用Laravel的開(kāi)發(fā)的兩個(gè)項(xiàng)目在同一個(gè)測(cè)試服務(wù)器部署,公用同一個(gè)redis。在使用laravel中的隊(duì)列時(shí),產(chǎn)生沖突干擾。

查找問(wèn)題原因

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

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

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

從該方法中可以看出Lrarvel隊(duì)列的redis實(shí)現(xiàn)是通過(guò)list結(jié)構(gòu)實(shí)現(xiàn)的,rpush(key, value)是將value推入鍵值為key的redis隊(duì)列,key的值則是通過(guò)$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 實(shí)例化的時(shí)候從config\queue.php配置中加載的 'queue' => 'default',$queue 是添加隊(duì)列時(shí)$this->dispatch( new jobClass()->onQueue($queue) )傳入的。

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

至此,兩個(gè)項(xiàng)目的隊(duì)列沖突原因就找到了。因?yàn)閞edis隊(duì)列配置中 'queue' => 'default' 都使用的默認(rèn)的default,所以當(dāng)共用redis時(shí),默認(rèn)的隊(duì)列l(wèi)ist 都是'queue:default',所以導(dǎo)致了沖突。

因?yàn)殛?duì)列監(jiān)聽(tīng) 監(jiān)聽(tīng)的隊(duì)列名稱是由 --queue參數(shù)決定的,如果不傳就是我們上面設(shè)置的默認(rèn)值,若傳了就會(huì)根據(jù)傳入的隊(duì)列名從前往后優(yōu)先依次處理,具體見(jiàn)代碼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ù),當(dāng) $queue不存在是直接調(diào)用$connection->pop()當(dāng)參數(shù)存在時(shí)會(huì)將參數(shù)解析,優(yōu)先處理排在前面的隊(duì)列名稱,將隊(duì)列名稱傳入pop($queue), pop()會(huì)嘗試從指定隊(duì)列或默認(rèn)隊(duì)列中獲取隊(duì)列任務(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);
    }
  }

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

解決方法

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

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

最后

遇到問(wèn)題,莫要病急亂投醫(yī)。從代碼入手,分析理解實(shí)現(xiàn)原理,找對(duì)點(diǎn),解決方法也許很簡(jiǎn)單,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要為大家詳細(xì)介紹了php+redis消息隊(duì)列搶購(gòu)實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
下面小編就為大家分享一篇PHP+Redis 消息隊(duì)列 實(shí)現(xiàn)高并發(fā)下注冊(cè)人數(shù)統(tǒng)計(jì)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
下面小編就為大家分享一篇laravel ORM 只開(kāi)啟created_at的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
這篇文章主要給大家介紹了如何通過(guò)源碼解析Laravel的依賴注入的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面
最近在使用laravel5.5,利用其實(shí)現(xiàn)了一個(gè)功能,下面分享給大家,這篇文章主要給大家介紹了關(guān)于Laravel 5.5基于內(nèi)置的Auth模塊如何實(shí)現(xiàn)前后臺(tái)登陸的相關(guān)資料,文中通過(guò)示例代碼介紹的非
主站蜘蛛池模板: 国内在线视频 | 一级毛片在线播放 | 午夜影院操 | 精品久久久久久久久久久久 | 久久久免费电影 | 国产精品高潮呻吟久久久久 | 这里只有精品999 | 欧美一区二区三区在线 | 国产精品久久久久久久免费大片 | 久久骚 | 理论片免费在线观看 | 欧美亚洲视频在线观看 | 少妇一区二区三区 | 韩日中文字幕 | 成人国产免费视频 | 国产精品日产欧美久久久久 | 亚洲一区中文字幕 | 亚洲国产黄色av | 日韩高清国产一区在线 | 成年人网站在线观看视频 | 亚洲国产一区视频 | 久久伊人青青草 | 精品视频一区二区三区在线观看 | 91在线色视频 | 欧美 日韩 亚洲91麻豆精品 | 神马久久久久久久久久 | 欧美一区二区三区在线视频 | 国产亚洲一区二区三区 | 午夜影院黄 | 国产精品成人一区二区三区夜夜夜 | 欧美淫 | 欧美一区二区三区一在线观看 | 欧美激情国产精品 | www亚洲精品 | 国产精品久久久久久久免费观看 | 欧美aaaaaaaaaa| 午夜免费在线电影 | 成人小视频在线观看 | 亚洲精品第一页 | 久久中文字幕一区 | 国内自拍真实伦在线观看 |