婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP異步進(jìn)程助手async-helper

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

熱門標(biāo)簽:南寧高頻外呼回?fù)芟到y(tǒng)哪家好 專業(yè)電話機(jī)器人批發(fā)商 400電話申請方法收費(fèi) 江蘇外呼電銷機(jī)器人報價 深圳外呼系統(tǒng)收費(fèi) 400電話辦理福州市 電話機(jī)器人危險嗎 離石地圖標(biāo)注 長沙crm外呼系統(tǒng)業(yè)務(wù)

簡介

PHP 的異步進(jìn)程助手,借助于 AMQP 實(shí)現(xiàn)異步執(zhí)行 PHP 的方法,將一些很耗時、追求高可用、需要重試機(jī)制的操作放到異步進(jìn)程中去執(zhí)行,將你的 HTTP 服務(wù)從繁重的業(yè)務(wù)邏輯中解脫出來。以一個較低的成本將傳統(tǒng) PHP 業(yè)務(wù)邏輯轉(zhuǎn)換成非阻塞、高可用、可擴(kuò)展的異步模式。

依賴

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

安裝

通過 composer 安裝

composer require l669/async-helper

或直接下載項(xiàng)目源碼

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

使用范例

業(yè)務(wù)邏輯:這里定義了很多等待被調(diào)用的類和方法,在你的項(xiàng)目中這可能是數(shù)據(jù)模型、或是一個發(fā)送郵件的類。

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

生產(chǎn)者:通常是 HTTP 服務(wù),傳統(tǒng)的 PHP 項(xiàng)目或是一個命令行程序,接收到某個請求或指令后進(jìn)行一系列的操作。

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

消費(fèi)者:PHP 的異步進(jìn)程,監(jiān)聽消息隊(duì)列,執(zhí)行你指定的方法。并且該消費(fèi)者進(jìn)程是可擴(kuò)展的高可用的服務(wù),這一切都得益于 AMQP,這是系統(tǒng)解耦、布局微服務(wù)的最佳方案。

consume.php

?php
require_once('vendor/autoload.php');
require_once('SendMailHelper.php');

use l669\AsyncHelper;
use l669\CacheHelper;

$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);
  }
}

# 在命令行下啟動消費(fèi)者進(jìn)程,推薦使用 supervisor 來管理進(jìn)程

php consume.php

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

// 接著上面的示例來說,這里省略了一些重復(fù)的代碼,下同
$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();
}

阻塞式重試:當(dāng)異步進(jìn)程執(zhí)行一個方法,方法內(nèi)部拋出異常時進(jìn)行重試,一些必須遵循執(zhí)行順序的業(yè)務(wù)就要采用阻塞式的重試,通過指定重試最大阻塞時長來控制。

use l669\CacheHelper;
use l669\AsyncHelper;
$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 = '請點(diǎn)擊郵件中的鏈接完成驗(yàn)證....';
$async_helper->run($send_mail_helper, 'request', [$mail]);

// 如果方法中需要拋出異常來結(jié)束程序,又不希望被異步進(jìn)程重試,可以拋出以下幾種錯誤碼,進(jìn)程捕獲到這些異常后會放棄重試:
// l669\AsyncException::PARAMS_ERROR
// l669\AsyncException::METHOD_DOES_NOT_EXIST
// l669\AsyncException::KNOWN_ERROR

非阻塞式重試:當(dāng)異步執(zhí)行的方法內(nèi)部拋出異常,async-helper 會將該方法重新放進(jìn)隊(duì)列的尾部,先執(zhí)行新進(jìn)入隊(duì)列的方法,回頭再重試剛才執(zhí)行失敗的方法,通過指定最大重試次數(shù)來控制。

use l669\CacheHelper;
use l669\AsyncHelper;
$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',          // 給付費(fèi)的大爺走 VIP 隊(duì)列
  '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 = '請點(diǎn)擊郵件中的鏈接完成驗(yàn)證....';
$async_helper->run('\\SendMailHelper', 'request', [$mail]);

應(yīng)用和解惑

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

和傳統(tǒng) PHP 相比

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

標(biāo)簽:興安盟 曲靖 株洲 南京 南昌 太原 濱州 白酒營銷

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP異步進(jìn)程助手async-helper》,本文關(guān)鍵詞  PHP,異步,進(jìn)程,助手,async-helper,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP異步進(jìn)程助手async-helper》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP異步進(jìn)程助手async-helper的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    香蕉久久夜色精品国产使用方法 | 91蝌蚪porny九色| 亚洲码国产岛国毛片在线| 欧美一区二区三区男人的天堂| eeuss鲁片一区二区三区| 国产自产视频一区二区三区| 日韩不卡手机在线v区| 亚洲国产一区二区三区青草影视| 中文字幕国产一区| 2020国产成人综合网| 日韩亚洲欧美一区| 日韩一级高清毛片| 日韩三级免费观看| 日韩欧美国产一二三区| 精品理论电影在线观看| 久久久久久久网| 91精品国产综合久久精品| 欧美在线免费视屏| 色哟哟在线观看一区二区三区| av资源网一区| 色先锋资源久久综合| 91视频91自| 欧美中文字幕亚洲一区二区va在线 | 久久精品一区二区三区av| 9191久久久久久久久久久| 欧美性色黄大片| 欧美男女性生活在线直播观看| 欧美日韩亚洲综合一区| 欧美精品一卡二卡| 日韩一区二区视频在线观看| 欧美一级夜夜爽| xvideos.蜜桃一区二区| 国产人伦精品一区二区| 日韩伦理免费电影| 亚洲成人综合网站| 捆绑调教美女网站视频一区| 国内精品伊人久久久久av一坑| 国产精品一区二区久久精品爱涩| 国产伦精一区二区三区| 99久久国产综合精品麻豆| 欧美主播一区二区三区| 欧美一区二区三区视频在线| 久久精品亚洲国产奇米99| 亚洲老司机在线| 欧美精品一区二区三区在线| 久久精品日产第一区二区三区高清版 | 国产日韩精品久久久| 一区在线观看免费| 午夜激情久久久| 极品少妇一区二区| 成人av在线影院| 欧美性猛片xxxx免费看久爱| 欧美电影免费观看高清完整版在| 日本一区二区不卡视频| 午夜久久福利影院| 久久99精品久久久久久久久久久久 | 中文字幕高清不卡| 亚洲综合小说图片| 免费久久精品视频| 欧美综合一区二区| 久久五月婷婷丁香社区| 国产日韩亚洲欧美综合| 亚洲成人在线网站| 久久电影网站中文字幕| 一本一道久久a久久精品综合蜜臀| 91精品麻豆日日躁夜夜躁| 久久久久久久久一| 亚洲黄色免费网站| 国产一区视频在线看| 91视频国产观看| 国产亚洲欧美日韩俺去了| 亚洲综合视频网| 免费成人性网站| 在线观看亚洲专区| 久久久久久电影| 麻豆精品一二三| 欧美日韩成人综合在线一区二区| 国产精品麻豆一区二区| 激情欧美日韩一区二区| 欧美午夜电影网| 日韩一区日韩二区| 久久尤物电影视频在线观看| 欧美国产日韩在线观看| 欧美一区二区三区四区视频| 自拍偷自拍亚洲精品播放| 国产福利一区二区三区在线视频| 一区二区三区色| 在线播放欧美女士性生活| 国产精品1区2区3区在线观看| 99国内精品久久| 久久久久99精品一区| 日本视频一区二区三区| 欧美日韩国产乱码电影| 亚洲欧洲精品一区二区三区| 国产精品亚洲第一区在线暖暖韩国 | 国产精品主播直播| 欧美成人精品二区三区99精品| 日韩欧美国产一区二区在线播放| 91美女片黄在线| 国产精品一二三四区| 日韩一区二区三区视频| 日日夜夜精品视频免费| 欧美性极品少妇| 亚洲最大成人综合| 在线一区二区三区四区| 亚洲欧美激情小说另类| 99久久夜色精品国产网站| 亚洲国产精品成人综合色在线婷婷| 精品一区二区三区久久久| 欧美理论电影在线| 日韩avvvv在线播放| 日韩欧美第一区| 国产精品亚洲第一| 日韩毛片精品高清免费| 欧美三级乱人伦电影| 91久久线看在观草草青青 | 综合色中文字幕| 91免费视频观看| 亚洲国产精品久久人人爱蜜臀| 欧美日本在线观看| 免费成人av在线| 久久先锋影音av鲁色资源网| 成人激情午夜影院| 亚洲美女精品一区| 4hu四虎永久在线影院成人| 国产一区美女在线| 亚洲天天做日日做天天谢日日欢 | 亚洲黄色在线视频| 欧美丰满高潮xxxx喷水动漫| 久久国产夜色精品鲁鲁99| 中文一区二区完整视频在线观看| 一本久久a久久精品亚洲| 日韩av在线发布| 国产精品麻豆网站| 欧美日韩亚洲高清一区二区| 精品一区二区国语对白| 亚洲婷婷综合久久一本伊一区| 91精品国产全国免费观看| 久久成人综合网| 首页亚洲欧美制服丝腿| 欧美午夜电影一区| 成人免费不卡视频| 日本最新不卡在线| 精品剧情v国产在线观看在线| 国产成人精品免费网站| 亚洲小说欧美激情另类| 日韩精品一区二区三区在线观看| 国产高清不卡一区二区| 亚洲3atv精品一区二区三区| 久久伊99综合婷婷久久伊| 欧美亚一区二区| 成人aa视频在线观看| 久久电影网电视剧免费观看| 夜夜嗨av一区二区三区四季av| 精品国产伦理网| 欧美男同性恋视频网站| 成人av免费网站| 韩国成人精品a∨在线观看| 亚洲妇女屁股眼交7| 国产精品久久久久久久久动漫| 91麻豆精品国产91久久久资源速度| 粉嫩aⅴ一区二区三区四区| 六月丁香综合在线视频| 亚洲精品伦理在线| 国产精品毛片大码女人| 精品播放一区二区| 日韩欧美国产成人一区二区| 91麻豆精品国产综合久久久久久| 高清成人免费视频| 国产精品18久久久久久vr | 日韩国产欧美在线观看| 日韩欧美色综合网站| 欧美美女直播网站| 色婷婷av久久久久久久| 成人三级伦理片| 国产主播一区二区三区| 久久黄色级2电影| 激情综合五月婷婷| 久草这里只有精品视频| 六月婷婷色综合| 国模少妇一区二区三区| 亚洲成人久久影院| 伊人一区二区三区| 亚洲国产成人tv| 天天免费综合色| 蜜桃久久久久久久| 激情偷乱视频一区二区三区| 久久av资源网| 国产精品一区专区| 国产a久久麻豆| 久久国产精品99久久人人澡| 99精品视频中文字幕| 日本久久一区二区三区| 一本大道av伊人久久综合| 亚洲一区二区三区视频在线| 亚洲伦理在线精品| 五月综合激情婷婷六月色窝| 蜜臀国产一区二区三区在线播放| 精品在线观看视频| 国产呦萝稀缺另类资源|