gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

PHP異步進程助手(async-helper)

async-helper

簡介

PHP 的異步進程助手,借助于 AMQP 實現異步執行 PHP 的方法,將一些很耗時、追求高可用、需要重試機制的操作放到異步進程中去執行,將你的 HTTP 服務從繁重的業務邏輯中解脫出來。以一個較低的成本將傳統 PHP 業務邏輯轉換成非阻塞、高可用、可擴展的異步模式。

依賴

  • php 5.6+
  • ext-bcmath
  • ext-amqp 1.9.1+
  • ext-memcached 3.0.3+

安裝

通過 composer 安裝

composer require l669/async-helper

或直接下載項目源碼

wget https://github.com/l669306630/async-helper/archive/master.zip

使用范例

業務邏輯:這里定義了很多等待被調用的類和方法,在你的項目中這可能是數據模型、或是一個發送郵件的類。

<?php class SendMailHelper  {     /**      * @param array $mail      * @throws Exception      */     public static function request($mail)     {         // 在這里發送郵件,或是通過調用第三方提供的服務發送郵件         // 發送失敗的時候你拋出了異常,希望被進程捕獲,并按設定的規則進行重試     }     }

生產者:通常是 HTTP 服務,傳統的 PHP 項目或是一個命令行程序,接收到某個請求或指令后進行一系列的操作。

<?php  use l669AsyncHelper; class UserController {     public function register()     {         // 假設這是一個用戶注冊的請求,用戶提交了姓名、郵箱、驗證碼         // 第一步、校驗用戶信息         // 第二步、實例化異步助手,這時候會連接 AMQP         $async_helper = new AsyncHelper([             'host' => '127.0.0.1',             'port' => '5672',             'user' => 'root',             'pass' => '123456',             'vhost' => '/'         ]);         // 第三步、保存用戶信息到數據庫         $mail = [             'from' => 'service@yourdomain.com',              'to' => 'username@163.com',              'subject' => '恭喜你注冊成功',             'body' => '請點擊郵件中的鏈接完成驗證....'         ];         // 第四步、通過異步助手發送郵件         $async_helper->run('\SendMailHelper', 'request', [$mail]);                  // 這是同步的模式去發送郵件,如果郵件服務響應遲緩或異常,就會直接影響該請求的響應時間,甚至丟失這封重要郵件         // SendMailHelper::request($mail);     } }

消費者:PHP 的異步進程,監聽消息隊列,執行你指定的方法。并且該消費者進程是可擴展的高可用的服務,這一切都得益于 AMQP,這是系統解耦、布局微服務的最佳方案。

consume.php

<?php require_once('vendor/autoload.php'); require_once('SendMailHelper.php');  use l669AsyncHelper; use l669CacheHelper;  $cache_helper = new CacheHelper('127.0.0.1', 11211); while(true){     try{         $async_helper = new AsyncHelper([             'host' => '127.0.0.1',             'port' => '5672',             'user' => 'root',             'pass' => '123456',             'vhost' => '/',             'cacheHelper' => $cache_helper         ]);         $async_helper->consume();     }catch(Exception $e){         // 可以在這里記錄一些日志         sleep(2);     } }
# 在命令行下啟動消費者進程,推薦使用 supervisor 來管理進程 php consume.php

支持事務:需要一次提交執行多個異步方法,事務可以確保完成性。

// 接著上面的示例來說,這里省略了一些重復的代碼,下同 $async_helper->beginTransaction(); try{     $async_helper->run('\SendMailHelper', 'request', [$mail1]);     $async_helper->run('\SendMailHelper', 'request', [$mail2]);     $async_helper->run('\SendMailHelper', 'request', [$mail3]);     $async_helper->commit(); }catch(Exception $e){     $async_helper->rollback(); }

阻塞式重試:當異步進程執行一個方法,方法內部拋出異常時進行重試,一些必須遵循執行順序的業務就要采用阻塞式的重試,通過指定重試最大阻塞時長來控制。

use l669CacheHelper; use l669AsyncHelper; $async_helper = new AsyncHelper([     'host' => '127.0.0.1',     'port' => '5672',     'user' => 'root',     'pass' => '123456',     'vhost' => '/',     'cacheHelper' => new CacheHelper('127.0.0.1', 11211),     'retryMode' => AsyncHelper::RETRY_MODE_REJECT,  // 阻塞式重試     'maxDuration' => 600                            // 最長重試 10 分鐘 ]); $send_mail_helper = new SendMailHelper(); $mail = new stdClass(); $mail->from = 'service@yourdomain.com'; $mail->to = 'username@163.com'; $mail->subject = '恭喜你注冊成功'; $mail->body = '請點擊郵件中的鏈接完成驗證....'; $async_helper->run($send_mail_helper, 'request', [$mail]);  // 如果方法中需要拋出異常來結束程序,又不希望被異步進程重試,可以拋出以下幾種錯誤碼,進程捕獲到這些異常后會放棄重試: // l669AsyncException::PARAMS_ERROR // l669AsyncException::METHOD_DOES_NOT_EXIST // l669AsyncException::KNOWN_ERROR

非阻塞式重試:當異步執行的方法內部拋出異常,async-helper 會將該方法重新放進隊列的尾部,先執行新進入隊列的方法,回頭再重試剛才執行失敗的方法,通過指定最大重試次數來控制。【推薦:PHP視頻教程】

use l669CacheHelper; use l669AsyncHelper; $async_helper = new AsyncHelper([     'host' => '127.0.0.1',     'port' => '5672',     'user' => 'root',     'pass' => '123456',     'vhost' => 'new',     'cacheHelper' => new CacheHelper('127.0.0.1', 11211),     'queueName' => 'emails.vip',                    // 給付費的大爺走 VIP 隊列     'retryMode' => AsyncHelper::RETRY_MODE_TTL,     // 非阻塞式重試     'maxRetries' => 10                              // 最多重試 10 次 ]); $mail = new stdClass(); $mail->from = 'service@yourdomain.com'; $mail->to = 'username@163.com'; $mail->subject = '恭喜你注冊成功'; $mail->body = '請點擊郵件中的鏈接完成驗證....'; $async_helper->run('\SendMailHelper', 'request', [$mail]);

應用和解惑

  • 我們采用的是開源的 RabbitMQ 來為我們提供的 AMQP 服務。
  • 你的項目部署在擁有很多服務器節點的集群上,每個節點的程序都需要寫日志文件,現在的問題就是要收集所有節點上面的日志到一個地方,方便我們及時發現問題或是做一些統計。所有節點都可以使用 async-helper 異步調用一個寫日志的方法,而執行這個寫日志的方法的進程只需要在一臺機器上啟動就可以了,這樣所有節點的日志就都實時掌握在手里了。
  • 做過微信公眾號開發的都知道,騰訊微信可以將用戶的消息推送到我們的服務器,如果我們在 5s 內未及時響應,騰訊微信會重試 3 次,其實這就是消息隊列的應用,使用 async-helper 可以輕松的做和這一樣的事情。
  • 得益于 RabbitMQ,你可以輕松的橫向擴展你的消費者進程的能力,因為 RabbitMQ 天生就支持集群部署,你可以輕松的啟動多個消費者進程,或是將消費者進程分布到多臺機器上。
  • 如果 RabbitMQ 服務不可用怎么辦呢?部署 RabbitMQ 高可用服務是容易的,對外提供單一 IP,這個 IP 是個負載均衡,背后是 RabbitMQ 集群,負載均衡承擔對后端集群節點的健康檢查。
  • async-helper 能否承受高并發請求?async-helper 生產者使用的是短連接,也就說在你的 HTTP 還沒有響應瀏覽器的時候 async-helper 就已經結束了工作,你連接 RabbitMQ 的時間是百分之百小于 HTTP 請求的時間的,換言之,只要 RabbitMQ 承受并發的能力超過你的 HTTP 服務的承受并發的能力,RabbitMQ 就永遠不會崩,通過橫向擴展 RabbitMQ 很容易做到的。

和傳統 PHP 相比

  • 對任何 PHP 方法通過反射進行異步執行;
  • 高可用,執行方法進入消息隊列,可持久化,即使服務器宕機,執行任務也不丟失;
  • 高可用,對異常可以進行不限次數和時間的重試,重試次數和時間可配置;
  • 支持對多個異步方法包含在事務中執行,支持回滾事務;
  • 方法的參數類型支持除資源類型(resource)和回調函數(callable)外的任意類型的參數;
  • 得益于 AMQP,異步方法可以承受高并發、高負載,支持集群部署、橫向擴展;
  • 低延時,實測延時時間 0.016 ~ 0.021s;
  • 適用于:日常數據庫操作、日志收集、金融交易、消息推送、發送郵件和短信、數據導入導出、計算大量數據生成報表;

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
狠狠干狠狠操视频| 成人毛片视频网站| 国产小视频精品| 一级黄色香蕉视频| www.四虎成人| 久久久久久久久久福利| 91好吊色国产欧美日韩在线| 青青在线视频免费观看| 在线无限看免费粉色视频| 九九热免费在线观看| 九九九九九伊人| www.-级毛片线天内射视视| 91手机视频在线| 日本黄色播放器| 欧美少妇一区二区三区| 91国在线高清视频| 久草视频国产在线| 国产网站免费在线观看| 国产成人av影视| 精品国产鲁一鲁一区二区三区| 在线观看中文av| 国产免费一区二区视频| 日韩av在线第一页| 黄色aaa级片| 性久久久久久久久久久久久久| 国产成人精品免费看在线播放| 操bbb操bbb| 麻豆av免费在线| 中文字幕55页| www在线观看免费| jizz欧美性11| 男人添女荫道口喷水视频| 男女午夜激情视频| 亚洲综合激情视频| 成人午夜精品久久久久久久蜜臀| 国产精品欧美激情在线观看| 网站一区二区三区| 日本精品福利视频| 亚洲成人av免费看| 996这里只有精品| 在线观看国产中文字幕| 香港三级日本三级a视频| 热久久精品国产| 国产女人18毛片| 在线免费视频a| 每日在线观看av| 公共露出暴露狂另类av| 欧美黑人又粗又大又爽免费| 中文字幕1234区| 国产免费人做人爱午夜视频| 看一级黄色录像| 久久久久xxxx| 色婷婷狠狠18| 超碰影院在线观看| 丰满人妻中伦妇伦精品app | 日韩xxxx视频| 天天摸天天舔天天操| 欧美视频第三页| 欧美 丝袜 自拍 制服 另类| 日韩欧美一级在线| 天堂av免费看| 日韩视频在线免费播放| 天天做天天干天天操| 美女黄色片视频| 天天天干夜夜夜操| 天天操天天爽天天射| 国产性xxxx18免费观看视频| 国产老熟妇精品观看| 亚洲一区二区三区av无码| 麻豆视频传媒入口| 日本黄色片一级片| 奇米777四色影视在线看| theporn国产精品| 天堂av在线8| 97超碰人人爱| 欧美视频免费看欧美视频| 又大又硬又爽免费视频| 激情深爱综合网| 日韩欧美xxxx| 中文字幕剧情在线观看| 五月天国产视频| 欧美精品在欧美一区二区| 国产av熟女一区二区三区| 99国产精品白浆在线观看免费| 成年丰满熟妇午夜免费视频| 精品国产av无码一区二区三区| 91麻豆天美传媒在线| 国产美女永久无遮挡| 男女高潮又爽又黄又无遮挡| 黄色三级视频片| 亚洲综合av在线播放| 亚洲成人动漫在线| 久久久久免费看黄a片app| 日韩人妻精品无码一区二区三区| 欧美亚洲日本在线观看| 国产不卡的av| 国产免费黄视频| 日韩成人av免费| 91好吊色国产欧美日韩在线| www.色偷偷.com| 91精品国产吴梦梦| 青青在线免费观看视频| 黄色高清视频网站| 日韩毛片在线免费看| 黄色a级在线观看| 久久精品网站视频| www成人免费| 亚洲欧美在线精品| 九色自拍视频在线观看| а 天堂 在线| 国产福利视频在线播放| 色中文字幕在线观看| 男人的天堂99| 一二三四视频社区在线| 永久免费在线看片视频| 91看片在线免费观看| 国产一区二区网| 日本高清视频免费在线观看| 亚洲一级免费观看| 日韩av片在线看| 黄网站色视频免费观看| 一本一道久久a久久综合蜜桃| 无码人妻精品一区二区蜜桃网站| 国产精欧美一区二区三区白种人| 欧美视频第三页| 国产女女做受ⅹxx高潮| 亚洲人成无码网站久久99热国产| 在线播放免费视频| 色婷婷成人在线| 超碰av在线免费观看| 黑人糟蹋人妻hd中文字幕 | 国产成人三级视频| 欧美专区第二页| 欧美精品色视频| 一级网站在线观看| 天堂网成人在线| 成人短视频在线看| 可以免费看的黄色网址| 欧美日韩理论片| 亚洲激情在线看| 亚洲精品免费一区亚洲精品免费精品一区 | 妓院一钑片免看黄大片| 激情综合网俺也去| 国产福利一区视频| 三级视频中文字幕| 思思久久精品视频| 日本三日本三级少妇三级66| 色偷偷中文字幕| 国产天堂视频在线观看| 美脚丝袜脚交一区二区| 中国丰满人妻videoshd| 北条麻妃在线观看| 亚洲欧洲日本精品| 国产精品一二三在线观看| 日韩精品在线视频免费观看| 欧美色图色综合| 国产一区视频免费观看| 日韩视频在线观看一区二区三区| 久久免费一级片| 国产亚洲欧美在线视频| 色播五月激情五月| 欧美激情亚洲天堂| 国产1区2区在线| 天天爱天天做天天操| 国产日韩一区二区在线| 一路向西2在线观看| 免费网站在线观看视频| 亚洲少妇久久久| av动漫在线播放| 孩娇小videos精品| 黄网站色视频免费观看| 日韩精品你懂的| 日韩极品视频在线观看| 国产又猛又黄的视频| 国内自拍中文字幕| www.日本一区| 六月丁香激情网| 婷婷视频在线播放| 熟妇人妻无乱码中文字幕真矢织江 | 大陆极品少妇内射aaaaa| 夜夜夜夜夜夜操| av无码精品一区二区三区| 国产欧美精品aaaaaa片| av亚洲天堂网| www.超碰com| 国产精品va无码一区二区| 精品国产无码在线| jizz18女人| 成人性生生活性生交12| 国产深夜男女无套内射| 成人国产一区二区三区| 伊人色在线观看| 国产精品wwwww| 农民人伦一区二区三区| 中国一级大黄大黄大色毛片| 99热一区二区| 韩国日本美国免费毛片| 亚洲精品乱码久久久久久自慰| 九一国产精品视频| 国产特级淫片高清视频|