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

PHP異步進程助手async-helper

這篇文章主要介紹了PHP異步進程助手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 l669\AsyncHelper;
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 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);
  }
}

# 在命令行下啟動消費者進程,推薦使用 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 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 = '請點擊郵件中的鏈接完成驗證....';
$async_helper->run($send_mail_helper, 'request', [$mail]);

// 如果方法中需要拋出異常來結束程序,又不希望被異步進程重試,可以拋出以下幾種錯誤碼,進程捕獲到這些異常后會放棄重試:
// l669\AsyncException::PARAMS_ERROR
// l669\AsyncException::METHOD_DOES_NOT_EXIST
// l669\AsyncException::KNOWN_ERROR
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結合實例形式分析了php實現針對有序表插值查找的相關操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現服務端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現的多維數組排序算法,結合實例形式對比分析了php針對多維數組及帶有鍵名的多維數組進行排序相關操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結合ajaxuploadfile實現無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
主站蜘蛛池模板: 亚洲男人在线 | 中文字幕精品一区久久久久 | 老司机深夜福利视频 | 国产欧美日韩 | 免费看黄色小视频 | 亚洲人天堂 | 精品久久久久久久久久久久久久久久 | 91福利片 | 天天综合色 | 国产免费成人 | 中文字幕在线观看免费 | 一区二区三区四区视频在线观看 | 国产美女福利 | 日韩激情久久 | 国产三级黄色片 | 午夜视频免费在线观看 | 日日夜夜狠狠干 | 欧美mv日韩mv国产网站 | 黄色激情视频在线观看 | 欧美日韩精品在线观看 | 五月天激情国产综合婷婷婷 | 日本免费视频 | 亚洲三级黄色片 | 久久久久久一区 | 91激情 | 国产精品伦子伦免费视频 | 黑人系列合集h | 欧美亚洲自拍偷拍 | 91爱爱网站 | 97国产视频| 一区二区三区中文字幕 | 日韩三级视频 | 波多野结衣亚洲一区 | 国产乱国产乱300精品 | 在线观看成年人视频 | 亚洲黄色一级 | 欧美一级黄色大片 | 91av导航| av黄色在线观看 | 亚洲欧美中文字幕 | 黄色影视 |