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

首頁 > 語言 > PHP > 正文

PHP使用Beanstalkd實例詳解

2024-09-04 11:49:50
字體:
來源:轉載
供稿:網友

有關Beanstalkd的基本概念,編譯和yum的安裝方法已經在上篇文章《Beanstalkd消息/任務隊列的詳解》中介紹了,今天練習下PHP使用Beanstalkd的過程,我選擇的是使用Pheanstalk類來連接Beanstalkd

1.使用Composer安裝Pheanstalk

composer require pda/pheanstalk

2.實現代碼

php查看beanstalkd狀態腳本Status.php

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * Created by PhpStorm. 
  6.  
  7.  * User: jmsite.cn 
  8.  
  9.  * Date: 2019/1/21 
  10.  
  11.  * Time: 10:32 
  12.  
  13.  */ 
  14.  
  15. require "../vendor/autoload.php"
  16.  
  17. use Pheanstalk/Pheanstalk; 
  18.  
  19. $pheanstalk = new Pheanstalk('192.168.75.135',11300); 
  20.  
  21. print_r($pheanstalk->stats()); 

生產者代碼Producter.php

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * Created by PhpStorm. 
  6.  
  7.  * User: jmsite.cn 
  8.  
  9.  * Date: 2019/1/20 
  10.  
  11.  * Time: 16:30 
  12.  
  13.  */ 
  14.  
  15. require "../vendor/autoload.php"
  16.  
  17. use Pheanstalk/Pheanstalk; 
  18.  
  19. $pheanstalk = new Pheanstalk('192.168.75.135',11300); 
  20.  
  21. for ($i=0;$i<50;$i++){ 
  22.  
  23.     $data = array
  24.  
  25.         'key' => 'testkey'.$i
  26.  
  27.         'value' => 'testvalue'
  28.  
  29.         'time' => time(), 
  30. //Vevb.com 
  31.     ); 
  32.  
  33.     $ret = $pheanstalk->putInTube('test-tube', json_encode($data), Pheanstalk::DEFAULT_PRIORITY, Pheanstalk::DEFAULT_DELAY, Pheanstalk::DEFAULT_TTR); 
  34.  
  35.     var_dump($ret); 
  36.  

消費者代碼Consumer.php

  1. <?php 
  2.  
  3. /** 
  4.  
  5.  * Created by PhpStorm. 
  6.  
  7.  * User: jmsite.cn 
  8.  
  9.  * Date: 2019/1/20 
  10.  
  11.  * Time: 16:31 
  12.  
  13.  */ 
  14.  
  15. set_time_limit(0); 
  16.  
  17. ini_set('default_socket_timeout', 900); 
  18.  
  19. require "../vendor/autoload.php"
  20.  
  21. use Pheanstalk/Pheanstalk; 
  22.  
  23. $pheanstalk = new Pheanstalk('192.168.75.135',11300); 
  24.  
  25. while (true){ 
  26.  
  27.     $job = $pheanstalk 
  28.  
  29.         ->watch('test-tube'
  30.  
  31.         ->ignore('default'
  32.  
  33.         ->reserve(); 
  34.  
  35.     if ($job){ 
  36.  
  37.         sleep(2); 
  38.  
  39.         echo $job->getData(); 
  40.  
  41.         echo "/n"
  42.  
  43.         $pheanstalk->delete($job); 
  44.  
  45.     } 
  46.  

打開命令行/終端窗口,執行生產者,會向tube寫入50條任務

  1. PS E:/repository/work/beanstalk> php ./Producter.php 
  2.  
  3. int(101) 
  4.  
  5. int(102) 
  6.  
  7. int(103) 
  8.  
  9. int(104) 
  10.  
  11. int(105) 
  12.  
  13. int(106) 
  14.  
  15. int(107) 
  16.  
  17. int(108) 
  18.  
  19. int(109) 
  20.  
  21. int(110) 
  22.  
  23. int(111) 
  24.  
  25. int(112) 
  26.  
  27. int(113) 
  28.  
  29. int(114) 
  30.  
  31. ...... 

由此可見,$pheanstalk->putInTube成功后返回的是job的id

查看狀態

  1. PS E:/repository/work/beanstalk> php Status.php 
  2.  
  3. Pheanstalk/Response/ArrayResponse Object 
  4.  
  5.  
  6.     [_name:Pheanstalk/Response/ArrayResponse:private] => OK 
  7.  
  8.     [storage:ArrayObject:private] => Array 
  9.  
  10.         ( 
  11.  
  12.             [current-jobs-urgent] => 0 
  13.  
  14.             [current-jobs-ready] => 50 
  15.  
  16.             [current-jobs-reserved] => 0 
  17.  
  18.             [current-jobs-delayed] => 0 
  19.  
  20.             [current-jobs-buried] => 0 
  21.  
  22.             ...... 

結果中顯示處于ready待讀取狀態的job是50個

打開兩個或以上命令行/終端窗口,執行消費者,模擬多消費者競爭

消費者1

  1. PS E:/repository/work/beanstalk> php ./Consumer.php 
  2.  
  3. {"key":"testkey0","value":"testvalue","time":1548039103} 
  4.  
  5. {"key":"testkey1","value":"testvalue","time":1548039103} 
  6.  
  7. {"key":"testkey2","value":"testvalue","time":1548039103} 
  8.  
  9. {"key":"testkey4","value":"testvalue","time":1548039103} 
  10.  
  11. {"key":"testkey6","value":"testvalue","time":1548039103} 
  12.  
  13. {"key":"testkey8","value":"testvalue","time":1548039103} 
  14.  
  15. {"key":"testkey10","value":"testvalue","time":1548039103} 
  16.  
  17. {"key":"testkey12","value":"testvalue","time":1548039103} 
  18.  
  19. {"key":"testkey14","value":"testvalue","time":1548039103} 
  20.  
  21. {"key":"testkey16","value":"testvalue","time":1548039103} 
  22.  
  23. {"key":"testkey18","value":"testvalue","time":1548039103} 
  24.  
  25. {"key":"testkey20","value":"testvalue","time":1548039103} 
  26.  
  27. {"key":"testkey22","value":"testvalue","time":1548039103} 
  28.  
  29. {"key":"testkey24","value":"testvalue","time":1548039103} 
  30.  
  31. {"key":"testkey26","value":"testvalue","time":1548039103} 
  32.  
  33. {"key":"testkey28","value":"testvalue","time":1548039103} 
  34.  
  35. {"key":"testkey30","value":"testvalue","time":1548039103} 
  36.  
  37. {"key":"testkey32","value":"testvalue","time":1548039103} 
  38.  
  39. {"key":"testkey34","value":"testvalue","time":1548039103} 
  40.  
  41. {"key":"testkey36","value":"testvalue","time":1548039103} 
  42.  
  43. {"key":"testkey38","value":"testvalue","time":1548039103} 
  44.  
  45. {"key":"testkey40","value":"testvalue","time":1548039103} 
  46.  
  47. {"key":"testkey42","value":"testvalue","time":1548039103} 
  48.  
  49. {"key":"testkey44","value":"testvalue","time":1548039103} 
  50.  
  51. {"key":"testkey46","value":"testvalue","time":1548039103} 
  52.  
  53. {"key":"testkey48","value":"testvalue","time":1548039103} 

消費者2

  1. PS E:/repository/work/beanstalk> php ./Consumer.php 
  2.  
  3. {"key":"testkey3","value":"testvalue","time":1548039103} 
  4.  
  5. {"key":"testkey5","value":"testvalue","time":1548039103} 
  6.  
  7. {"key":"testkey7","value":"testvalue","time":1548039103} 
  8.  
  9. {"key":"testkey9","value":"testvalue","time":1548039103} 
  10.  
  11. {"key":"testkey11","value":"testvalue","time":1548039103} 
  12.  
  13. {"key":"testkey13","value":"testvalue","time":1548039103} 
  14.  
  15. {"key":"testkey15","value":"testvalue","time":1548039103} 
  16.  
  17. {"key":"testkey17","value":"testvalue","time":1548039103} 
  18.  
  19. {"key":"testkey19","value":"testvalue","time":1548039103} 
  20.  
  21. {"key":"testkey21","value":"testvalue","time":1548039103} 
  22.  
  23. {"key":"testkey23","value":"testvalue","time":1548039103} 
  24.  
  25. {"key":"testkey25","value":"testvalue","time":1548039103} 
  26.  
  27. {"key":"testkey27","value":"testvalue","time":1548039103} 
  28.  
  29. {"key":"testkey29","value":"testvalue","time":1548039103} 
  30.  
  31. {"key":"testkey31","value":"testvalue","time":1548039103} 
  32.  
  33. {"key":"testkey33","value":"testvalue","time":1548039103} 
  34.  
  35. {"key":"testkey35","value":"testvalue","time":1548039103} 
  36.  
  37. {"key":"testkey37","value":"testvalue","time":1548039103} 
  38.  
  39. {"key":"testkey39","value":"testvalue","time":1548039103} 
  40.  
  41. {"key":"testkey41","value":"testvalue","time":1548039103} 
  42.  
  43. {"key":"testkey43","value":"testvalue","time":1548039103} 
  44.  
  45. {"key":"testkey45","value":"testvalue","time":1548039103} 
  46.  
  47. {"key":"testkey47","value":"testvalue","time":1548039103} 
  48.  
  49. {"key":"testkey49","value":"testvalue","time":1548039103} 

兩個消費者競爭著完成了全部任務,由于我的beanstalkd啟動時開啟了binlog持久,所以beanstalkd重啟后任務也不會丟失

3.需要注意的事項

1.創建job時,設置的超時時間Pheanstalk::DEFAULT_TTR一定要比消費者處理一個job的時間要長,否則job在超時之后會被tube更改為ready狀態,被其他消費者獲取,而此時當前消費者還在處理該job,這就出現了一個job被多個消費者重復執行的可怕現象

2.Pheanstalk的維護者發生了變化,在新版的Pheanstalk中是不支持長連接的,當客戶端socket連接服務器時間超過php.ini中設置的default_socket_timeout時,如果未能從服務端tube獲得job,連接將會被斷開,所以消費者進程需要維護,以便在退出后可以重新開啟進程,推薦使用supervisord維護消費者進程。

判斷socket超時的代碼

  1. public function getLine($length = null) 
  2.  
  3.     { 
  4.  
  5.         $timeout = ini_get('default_socket_timeout'); 
  6.  
  7.         $timer   = microtime(true); 
  8.  
  9.         do { 
  10.  
  11.             $data = isset($length) ? 
  12.  
  13.                 $this->_wrapper()->fgets($this->_socket, $length) : 
  14.  
  15.                 $this->_wrapper()->fgets($this->_socket); 
  16.  
  17.             if ($this->_wrapper()->feof($this->_socket)) { 
  18.  
  19.                 throw new Exception/SocketException('Socket closed by server!'); 
  20.  
  21.             } 
  22.  
  23.             if (($data === false) && microtime(true) - $timer > $timeout) { 
  24.  
  25.                 $this->disconnect(); 
  26.  
  27.                 throw new Exception/SocketException('Socket timed out!'); 
  28.  
  29.             } 
  30.  
  31.         } while ($data === false); 
  32.  
  33.         return rtrim($data); 
  34.  
  35.     } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
疯狂欧美牲乱大交777| 久久久久日韩精品久久久男男| 国产偷亚洲偷欧美偷精品| 精品视频偷偷看在线观看| 亚洲综合视频1区| 欧美高跟鞋交xxxxxhd| 国产精品视频xxx| 亚洲天堂av在线免费| 日本一区二区在线免费播放| 亚洲理论片在线观看| 日韩欧美国产视频| 成人午夜激情免费视频| 亚洲精品国产欧美| 欧美日韩成人在线视频| 国产一区二区三区18| 91成人精品网站| 91牛牛免费视频| 久久综合国产精品台湾中文娱乐网| 国产精品久久久久av| 亚洲wwwav| 国产成人午夜视频网址| 日本久久久a级免费| 欧美精品久久久久久久久| 国产69久久精品成人看| 国产日韩在线亚洲字幕中文| 国产香蕉97碰碰久久人人| 国产欧美精品一区二区三区介绍| 97久久超碰福利国产精品…| 疯狂蹂躏欧美一区二区精品| 欧美日韩免费观看中文| 亚洲精品中文字幕女同| 国产欧亚日韩视频| 综合激情国产一区| 91精品在线观看视频| 亚洲精品国精品久久99热一| 欧美性高潮床叫视频| 亚洲成人在线网| 国产精品美女免费| 国产综合久久久久久| 欧美性高潮在线| 日日摸夜夜添一区| 欧美老少做受xxxx高潮| 欧美精品在线观看| 国产视频综合在线| 亚洲精品久久久久久久久久久| 精品视频www| 久久精品99国产精品酒店日本| 色综合久久久久久中文网| 国产日产欧美精品| 久久在线精品视频| 欧美专区中文字幕| 日韩一区二区精品视频| 日韩影视在线观看| 欧美电影免费看| 日韩av网址在线| 欧美大片第1页| 奇米四色中文综合久久| 国产精品jvid在线观看蜜臀| 一本色道久久88精品综合| 日韩小视频在线观看| 久久久久久久久91| 国产成人亚洲综合青青| 91精品免费久久久久久久久| 2019最新中文字幕| 日韩av免费看| 欧美壮男野外gaytube| 久久亚洲精品视频| 国产高清在线不卡| 在线观看国产欧美| 91av中文字幕| 国产精品黄页免费高清在线观看| 久久久久久久久久久免费| 日韩精品免费在线视频观看| 亚洲欧美国产高清va在线播| 欧美成人午夜影院| 成人高清视频观看www| 久久久精品中文字幕| 久久精品国产精品亚洲| 精品日韩美女的视频高清| 欧美国产在线视频| 亚洲成人激情在线观看| 正在播放国产一区| 欧美激情精品久久久久久| 91精品国产综合久久久久久久久| 欧美在线一级va免费观看| 中文字幕最新精品| 日日骚av一区| 国产精品久久久久久久久久东京| 日韩成人免费视频| 欧美另类交人妖| 中文字幕在线日韩| 亚洲欧美日韩国产成人| 精品日本美女福利在线观看| 亚洲人成电影在线观看天堂色| 成人激情视频免费在线| 国产午夜精品一区二区三区| 日韩欧美在线播放| 国产精品偷伦视频免费观看国产| 欧日韩不卡在线视频| 成人网在线免费观看| 久久精品亚洲94久久精品| 青草青草久热精品视频在线网站| 亚洲国产欧美一区二区三区同亚洲| 欧美成人精品不卡视频在线观看| 国产成人精品优优av| 激情av一区二区| 国产精品免费小视频| 欧美日韩激情视频8区| 国产精品一区二区三区免费视频| 色综合亚洲精品激情狠狠| 日本中文字幕不卡免费| 欧美精品在线极品| 亚洲精品国产精品国产自| 日日摸夜夜添一区| 国产成人亚洲综合91精品| 色播久久人人爽人人爽人人片视av| 亚洲日本中文字幕| 深夜福利一区二区| 国产一区二区视频在线观看| 亚洲缚视频在线观看| 久久婷婷国产麻豆91天堂| 日本韩国欧美精品大片卡二| 欧美国产日韩一区| 91欧美激情另类亚洲| 久久综合久中文字幕青草| 综合网日日天干夜夜久久| 亚洲欧美在线看| 日韩在线免费视频| 亚洲欧洲国产一区| 欧美国产极速在线| 亚洲美女自拍视频| 欧美专区国产专区| 欧美日韩亚洲高清| 亚洲精品国产综合久久| 深夜成人在线观看| 成人激情黄色网| 高清欧美性猛交xxxx| 亚洲第一av网站| 午夜欧美不卡精品aaaaa| 欧美高清在线播放| 亚洲影视中文字幕| 在线性视频日韩欧美| 91免费在线视频| 国产亚洲日本欧美韩国| 亚洲欧美三级伦理| 亚洲精品一区中文字幕乱码| www国产精品com| 97视频免费在线观看| 亚洲最大成人免费视频| 欧美肥老太性生活视频| 日韩精品免费电影| 国产精品∨欧美精品v日韩精品| 亚洲综合精品一区二区| 亚洲黄色在线观看| 精品欧美一区二区三区| 欧美极品美女视频网站在线观看免费| 亚洲娇小xxxx欧美娇小| 亚洲电影免费观看高清完整版在线观看| 久久久国产精品免费| 国产一区二区动漫| 51ⅴ精品国产91久久久久久| 91国产一区在线| 亚洲天堂av电影| 国产精品高清在线|