PHP异步进程助手async-helper
简介PHP 的异步进程助手,借助于 AMQP 实现异步执行 PHP 的方法,将一些很耗时、追求高可用、需要重试机制的操作放到异步进程中去执行,将你的 HTTP 服务从繁重的业务逻辑中解脱出来。以一个较低的成本将传统 PHP 业务逻辑转换成非阻塞、高可用、可扩展的异步模式。 依赖
安装通过 composer 安装 或直接下载项目源码 使用范例 业务逻辑:这里定义了很多等待被调用的类和方法,在你的项目中这可能是数据模型、或是一个发送邮件的类。 生产者:通常是 HTTP 服务,传统的 PHP 项目或是一个命令行程序,接收到某个请求或指令后进行一系列的操作。 '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]);
} 消费者:PHP 的异步进程,监听消息队列,执行你指定的方法。并且该消费者进程是可扩展的高可用的服务,这一切都得益于 AMQP,这是系统解耦、布局微服务的最佳方案。 consume.phpuse l669AsyncHelper;
use l669CacheHelper; $cache_helper = new CacheHelper('127.0.0.1',11211); # 在命令行下启动消费者进程,推荐使用 supervisor 来管理进程 php consume.php 支持事务:需要一次提交执行多个异步方法,事务可以确保完成性。 beginTransaction();
try{
$async_helper->run('SendMailHelper',[$mail1]);
$async_helper->run('SendMailHelper',[$mail2]);
$async_helper->run('SendMailHelper',[$mail3]);
$async_helper->commit();
}catch(Exception $e){
$async_helper->rollback();
}
阻塞式重试:当异步进程执行一个方法,方法内部抛出异常时进行重试,一些必须遵循执行顺序的业务就要采用阻塞式的重试,通过指定重试最大阻塞时长来控制。 '127.0.0.1','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,[$mail]);
// 如果方法中需要抛出异常来结束程序,又不希望被异步进程重试,可以抛出以下几种错误码,进程捕获到这些异常后会放弃重试: 非阻塞式重试:当异步执行的方法内部抛出异常,async-helper 会将该方法重新放进队列的尾部,先执行新进入队列的方法,回头再重试刚才执行失败的方法,通过指定最大重试次数来控制。 '127.0.0.1','vhost' => 'new','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',[$mail]);
应用和解惑
和传统 PHP 相比
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- LightOJ1248---Dice (III)(概率dp)
- php – Zend Framework 2:在应用程序到达控制器之前如何将
- php源码分析之DZX1.5加密解密函数authcode用法
- 设计模式(结构型)之组合模式(Composite Pattern)
- zend-framework – Zend Framework 1.8:如何自动设置应用程
- java.lang.String?cannot?be?cast处理办法
- 学习php设计模式 php实现享元模式(flyweight)
- php – 如何在每10条记录中插入foreach循环
- 解析php中curl_multi的应用
- php – 检查请求来自哪里