巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

PHP异步历程助手async-helper

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-25 14:40:46 阅读数: 109

简介

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 http://github.com/l669306630/async-helper/archive/master.zip

操纵典范

营业逻辑:这里界说了良多期待被挪用的类和体例,在你的名目中这能够是数据模子、或是一个发送邮件的类。

<?phpclass 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

<?phprequire_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 会将该体例从头放停止列的尾部,先履行新进入行列的体例,转头再重试适才履行失利的体例,经由进程指定最大重试次数来节制。

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;
  • 合用于:平常数据库操纵、日记搜集、金融买卖、动静推送、发送邮件和短信、数据导入导出、计较大批数据天生报表;

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家搜集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

15
04月
高端网站扶植-搜集营销与电子商务两个差别点

搜集营销便因此国际互联搜集为根本,操纵数字化的信息和搜集媒体的交互性来赞助营销方针完成的一种新型的市场营销体例。简略的说,搜集营销便因此互联... >>概况

20
04月
IE9对HTML5中局部属性不撑持的缘由阐发

本文较为详细的阐发了IE9对HTML5中局部属性不撑持的缘由,分享给大师供大师参考。详细体例以下:尽人皆知,在IE9中对HTML5规范中的... >>概况

02
05月
若何来做企业网站的优化呢?

良多企业网站的优化排名对企业的运营和营业来历显得相称主要,那咱们究竟若何来做企业网站的优化呢?咱们先来看一组排名数据:该网站做过改编,以是中... >>概况

03
05月
最罕见的的优化手腕有哪些?汇总罕见的SEO快

SEO优化市场一向都是鱼龙稠浊,各种优化手腕层见叠出,但不管甚么样的手腕,都离开不了最根本的以收录排名人量为导向的优化体例,那末在优化的进程... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站