亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Laravel 4.2 中隊列服務(queue)使用感受

2024-05-04 23:26:32
字體:
來源:轉載
供稿:網友
Laravel的隊列組件為許多隊列服務提供了統一的API接口。隊列服務讓你可以異步處理一個耗時任務,比如延遲發送一封郵件,從而大大加快了應用的Web請求處理速度。
 
 

這半個月,我參與重寫了一個微信公眾號后端系統,首次使用了laravel 4.2,以及laravel引以為傲的隊列服務(queue)。

由于整個系統涉及到多端交互,又有大量語音傳輸、處理的業務,我們在一些地方發現響應時間過長。之前的系統基于node.js和mongoDB,由于node天生就是異步,有守護進程,所以并沒有出現過這個問題,而這次重寫必然要引入異步流程了。Queue進入了我們的視線。

根據這一頁幾乎還全是英文的”中文文檔“ ,laravel恰好在4.2版本中剛剛引入了redis作為隊列存儲,這是一個非常好的消息。OK,背景介紹到這里,下面扯扯干貨。

laravel中的隊列服務跟其他隊列服務也沒有什么不同,都是最符合人類思維的最簡單最普遍的流程:有一個地方存放隊列信息,一個PHP進程在運行時將任務寫入,另外一個PHP守護進程輪詢隊列信息,將達到執行要求的任務執行并刪除。由于PHP是url驅動的同步語言,本身是阻塞的,所以laravel提供一個守護進程工具來查詢并執行隊列信息也就不足為奇了。

Laravel的queue配置文件是 /app/config/queue.php,在 Default Queue Driver 這一項中,可以選擇"sync", "beanstalkd", "sqs", "iron", "redis" 五種驅動器。

1. sync是本地調試用的同步驅動器

2. beanstalkd 是一個專業隊列服務驅動器:http://kr.github.io/beanstalkd/

3. sqs和iron是國外第三方隊列服務

4. 最后一項redis給了我們一個使用redis的理由,這樣我們順便把緩存服務和session服務全部遷移到redis上了。

0. 順便說一句,session驅動器千萬別用mysql,處理時間1S不是夢,哎,看誰呢,說的就是你,1S哥!

隊列服務需要專門新建任務類,作為獨立類,他們不需要繼承類,因為隊列里的任務在執行的時候,是由PHP守護進程來獨立調用的,當然如果你要use一下別的類再調用,也不會出錯。之前我把很多額外服務獨立到了一個單獨的文件夾 /app/services 里,比如輸入信息驗證 validator,特殊安全驗證模塊等,這次queue類們就位于其中。

queue的使用非常簡單,下面就是一個簡單的示例:

 

復制代碼代碼如下:

use Queue;
Queue::push('CurlJsonQueue', [
 'url' => $url,
 'json' => $json
]);

 

這就是一個標準的queue壓入流程了。當然,在這里我把CurlJsonQueue類放到了services根目錄下,這個目錄已經被我注冊到composer.json的"autoload"的"classmap"中,是位于頂層命名空間中的,可以直接調用,如果需要調用非頂層命名空間,是可以寫 App/OOXX 的。我們的系統需要大量和微信服務器交互,所以就獨立出來了這個類。

 

復制代碼代碼如下:

<?php

 

class CurlJsonQueue extends BaseController{

 public function fire($job, $data)
 {
  $url = $data['url'];
  $json = $data['json'];

  parent::base_post_curl($url, $json);

  $job->delete();
 }
}

 

這個類默認的方法是 fire() ,參數也是固定的兩個 $job 和 $data,由于我在BaseController中封裝了post的curl模塊,所以就調用了一下。另外這里還有一個小坑,當時寫base_post_curl() 的時候用的protected,導致use BaseController無效,必須繼承。

通過執行上面的代碼,queue中就被放入了一個新的任務,laravel通過下面的命令開啟守護進程:

 

復制代碼代碼如下:

php artisan queue:listen

 

然后守護進程就開始處理隊列了。此代碼中的PHP命令和artisan文件的路徑請自行調整。

大家可能注意到了,我們要使用的這個隊列系統用到了redis和PHP命令行,如果在測試環境,加個開機啟動甚至是手動啟動都可以,但是在生產環境就需要更穩固的工具來守護這兩個程序,我們用的是supervisor,關于supervisor的安裝配置大家可以參考這篇文章: http://blog.segmentfault.com/qianfeng/1190000000532561 注意,文章里有小坑請自行去踩。。。

OK,全部配置好之后,跑起來redis和PHP命令行,整個系統就開始愉快地運行啦~

使用感受:

隊列服務超好用,之前一次和app的交互流程需要6-7S,異步以后降低到2S以內,基本就是傳輸時間和PHP代碼運行時間了,耗時的特殊操作已經異步了。不過隊列服務默認1S開一個進程檢查一次redis中有沒有可以運行的服務,在阿里云服務器上,大約能占到單核的10%,消耗略大,而且隊列處理時間相對較長,因為沒有了之前同步時候的文件加載福利。不過如果有多個任務,PHP進程是會連續執行的,不會1S執行一個的啦。

下面說說坑:

1. 由于queue核心類使用了一個特殊函數,導致沒有明確類型的變量會以單元素數組的形式存進json,再存進redis。解決辦法就是在每一個要放進去的數據前面加上 ''. 。上面的$url和$json由于都已經在前面用引號進行了類型申明,故沒做這一步操作。

2. 如果要傳遞url給隊列,系統queue類會在每一個 / 前面加上兩個 // 。這對于一些特殊操作可能會造成致命影響。(開玩笑,有上面那個致命么?。?/p>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情一区二区三区久久久| 51ⅴ精品国产91久久久久久| 国产精品丝袜视频| 欧美成人精品在线播放| 国产精品日日做人人爱| 日韩中文字在线| 91国在线精品国内播放| 青草青草久热精品视频在线网站| 亚洲日本成人网| 亚洲第一网中文字幕| 69**夜色精品国产69乱| 日韩av一区在线观看| 中文字幕在线成人| 欧美多人乱p欧美4p久久| 国产一区二区三区毛片| 国产精选久久久久久| 疯狂做受xxxx高潮欧美日本| 日韩在线观看视频免费| 欧美一级高清免费播放| 亚洲精品在线91| 亚洲有声小说3d| 欧美专区日韩视频| 中文字幕精品国产| 国产精品69久久| 精品无人国产偷自产在线| 精品久久久香蕉免费精品视频| 国产精品亚洲美女av网站| 欧美成人免费在线视频| 午夜精品视频网站| 2020欧美日韩在线视频| 久久中文字幕国产| 91免费看国产| 国产精品成人久久久久| 欧美激情在线视频二区| 亚洲福利视频网| 欧美日本精品在线| 欧美精品一区在线播放| 青草成人免费视频| 成人激情视频在线| 亚洲男人av电影| 精品亚洲aⅴ在线观看| 久久青草福利网站| 一区二区三区久久精品| 国产精品久久一| 国产成人精品免高潮费视频| 国产精品久久视频| 久久久久久免费精品| 欧美日韩福利电影| 亚洲国产欧美一区二区三区久久| 亚洲美女黄色片| 91亚洲午夜在线| 亚洲精品99久久久久中文字幕| 国产在线日韩在线| 日韩在线视频网| 亚洲欧美日韩国产精品| 亚洲第一区第一页| 黑人与娇小精品av专区| 久久久久久尹人网香蕉| 精品露脸国产偷人在视频| 亚洲日本成人女熟在线观看| 亚洲国产99精品国自产| 国内精品久久久久伊人av| 成人久久18免费网站图片| 精品成人国产在线观看男人呻吟| 青草青草久热精品视频在线观看| 成人美女免费网站视频| 日韩欧美999| 精品夜色国产国偷在线| 自拍视频国产精品| 亚洲精品资源美女情侣酒店| 欧美性猛交xxxxx免费看| 成人黄色网免费| 色无极影院亚洲| 国产精品视频午夜| 91久久精品国产91久久| 久久久中文字幕| 九九久久综合网站| 日韩影视在线观看| 欧美亚洲国产另类| www.精品av.com| 欧美精品videossex性护士| 日韩av中文在线| 国产精品午夜国产小视频| 亚洲系列中文字幕| 最近更新的2019中文字幕| 亚洲片在线观看| 成人欧美在线视频| 九九热这里只有精品免费看| 国产精品久久久久91| 狠狠爱在线视频一区| 欧美性受xxx| 国产一区二区三区视频免费| 久久免费国产视频| 欧美精品成人91久久久久久久| 国产日韩精品综合网站| 91极品女神在线| 亚洲精品99久久久久| 亚洲片av在线| 91精品视频播放| 欧美日韩中文在线观看| 中文字幕欧美亚洲| 欧美电影《睫毛膏》| 在线精品国产成人综合| 亚洲www在线观看| xx视频.9999.com| 精品久久久999| 亚洲精品在线不卡| 亚洲国产成人久久综合一区| www.亚洲一二| 正在播放欧美一区| 精品精品国产国产自在线| 青青久久aⅴ北条麻妃| 91地址最新发布| 欧美激情a在线| 亚洲色在线视频| 国产亚洲激情视频在线| 亚洲精品xxxx| 亚洲综合在线中文字幕| 麻豆乱码国产一区二区三区| 色悠悠久久88| 亚洲女人被黑人巨大进入| 亚洲欧美国产精品va在线观看| 久久久免费在线观看| 日韩免费在线看| 黑人巨大精品欧美一区二区三区| 中文字幕日韩精品在线| 亚洲精品电影网在线观看| 亚洲精品欧美一区二区三区| 亚洲电影成人av99爱色| 欧美第一页在线| 久久精品久久久久| 日本亚洲欧洲色| 欧美大片欧美激情性色a∨久久| 欧美日韩国产一区在线| 国产色婷婷国产综合在线理论片a| 久久久亚洲国产天美传媒修理工| 91久久久久久久久久久| 九色精品免费永久在线| 成人黄色免费网站在线观看| 亚洲精品成a人在线观看| www.日韩不卡电影av| 亚洲aaa激情| 北条麻妃一区二区三区中文字幕| 欧美黄色片在线观看| 亚洲经典中文字幕| 亚洲视频在线播放| 欧美成人精品一区| 欧美精品激情在线观看| 精品久久久久久久中文字幕| 亚洲女人天堂av| 国产日韩精品在线播放| 色综合老司机第九色激情| 欧美日韩亚洲视频一区| 国模吧一区二区三区| 精品无码久久久久久国产| 91精品国产综合久久香蕉922| 插插插亚洲综合网| 欧美日韩电影在线观看| 成人免费视频网址| 国产午夜精品全部视频在线播放| 国内揄拍国内精品| 欧美丰满片xxx777| 亚洲人成在线一二| 国产成人精品一区二区|