我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP的async-helper怎么安装使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP的async-helper怎么安装使用

这篇“PHP的async-helper怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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

使用范例

业务逻辑:这里定义了很多等待被调用的类和方法,在你的项目中这可能是数据模型、或是一个发送邮件的类。

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

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

非阻塞式重试:当异步执行的方法内部抛出异常,async-helper 会将该方法重新放进队列的尾部,先执行新进入队列的方法,回头再重试刚才执行失败的方法,通过指定最大重试次数来控制。【推荐:PHP视频教程】

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',                    // 给付费的大爷走 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的async-helper怎么安装使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP的async-helper怎么安装使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP的async-helper怎么安装使用

这篇“PHP的async-helper怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP的async-help
2023-06-28

php composer怎么安装使用

这篇文章主要介绍“php composer怎么安装使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php composer怎么安装使用”文章能帮助大家解决问题。php-composer的安装与使用
2023-06-26

怎么使用Git安装PHP

本篇内容介绍了“怎么使用Git安装PHP”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!步骤1:更新系统首先,您需要使用以下命令更新系统:su
2023-07-06

使用yum怎么安装php curl

这期内容当中小编将会给大家带来有关使用yum怎么安装php curl,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。yum怎么安装php curl?Linux下安装PHP的curl扩展先安装依赖包:yum
2023-06-15

linux怎么使用yum安装php

linux使用yum安装php的方法:1、执行“mkdir /usr/local/php”命令;2、下载yum源的更新安装包;3、安装相关yum源安装包;4、通过“yum install”命令安装php即可。
2023-05-14

vue的async-await怎么使用

本文小编为大家详细介绍“vue的async-await怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue的async-await怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。曾经见过为了让钩子
2023-07-04

PHP中怎么安装和使用GraphQL

这篇文章将为大家详细讲解有关PHP中怎么安装和使用GraphQL,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertex
2023-06-14

JavaScript中的async函数怎么使用

本篇内容主要讲解“JavaScript中的async函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的async函数怎么使用”吧!async函数async函数的返
2023-07-04

怎么使用PHP命令安装数据库

这篇“怎么使用PHP命令安装数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用PHP命令安装数据库”文章吧。PHP
2023-07-06

安装xampp后怎么用php

这篇“安装xampp后怎么用php”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“安装xampp后怎么用php”文章吧。第一步
2023-07-06

JS的异步函数async/await怎么使用

这篇“JS的异步函数async/await怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS的异步函数async/a
2023-07-05

Python的Playwright怎么安装使用

这篇文章主要介绍“Python的Playwright怎么安装使用”,在日常操作中,相信很多人在Python的Playwright怎么安装使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python的Play
2023-06-25

PHP_CodeSniffer怎么安装使用

这篇文章主要介绍了PHP_CodeSniffer怎么安装使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP_CodeSniffer怎么安装使用文章都会有所收获,下面我们一起来看看吧。PHP_CodeSni
2023-06-26

CatBoost怎么安装使用

这篇文章主要介绍“CatBoost怎么安装使用”,在日常操作中,相信很多人在CatBoost怎么安装使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CatBoost怎么安装使用”的疑惑有所帮助!接下来,请跟
2023-06-19

Presto怎么安装使用

这篇文章主要介绍“Presto怎么安装使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Presto怎么安装使用”文章能帮助大家解决问题。一、什么是Presto?背景知识:Hive的缺点和Prest
2023-06-02

Betty怎么安装使用

本篇内容主要讲解“Betty怎么安装使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Betty怎么安装使用”吧!安装Betty的安装非常简单直接。首先确认你已经安装了下面这些依赖包[LCTT译
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录