PHP使用gearman进行异步的邮件或短信发送操作详解


Posted in PHP onFebruary 27, 2020

本文实例讲述了PHP使用gearman进行异步的邮件或短信发送操作。分享给大家供大家参考,具体如下:

一、准备工作

1、为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式。
2、使用gearmanManager来管理我们的worker脚本,方便测试。

上述两条请看我之前写的两篇文章

二、编写测试脚本

sendEmail.php代码如下:

<?php
//注意函数名与文件名相同
function sendEmail($job) {
  $workId = uniqid();

  //workload()获取客户端发送来的序列化数据
  $data = json_decode($job->workload(), true);
  
  //这里模拟处理过程
  //具体的业务,这里应该是请求发送邮件的接口,这里只做演示
  sleep(1);
  
  echo "workId: {$workId} 发送 {$data['email']} 成功\n";
}

client.php代码如下:

<?php
//创建一个客户端
$client = new GearmanClient();
//添加一个job服务
$client->addServer('127.0.0.1', 4730);

$cnt = 5000;
$ret = array();

//循环发送5000条邮件
for($i = 0; $i < $cnt; ++$i) {
  //doBackground异步,返回提交任务的句柄
  $ret[$i] = $client->doBackground('sendEmail', json_encode(array(
    'email' => "{$i}@qq.com",
    'title' => "邮件标题{$i}",
    'body' => "我是内容{$i}",
  )));
}

三、修改gearmanManager中配置信息

我的gearmanManager是安装在/data/GearmanManager/下

> vi /data/GearmanManager/etc/GearmanManager.ini

添加如下信息,我们为sendEmail启动五个进程

[sendEmail]
;指定5个进程
dedicated_count=5
;5个进程都只做sendEmail工作
dedicated_only=1

四、启动gearman

> gearmand -d -q mysql \
--mysql-host=192.168.1.100 \
--mysql-port=3306 \
--mysql-user=gearman \
--mysql-password=123456 \
--mysql-db=gearman \
--mysql-table=gearman_queue &

五、启动gearmanManager

> cd /data/GearmanManager
> ./bin/pecl_manager.php -c /data/GearmanManager/etc/GearmanManager.ini -vvv

PHP使用gearman进行异步的邮件或短信发送操作详解

六、运行client.php

> /data/php56/bin/php /data/client.php

PHP使用gearman进行异步的邮件或短信发送操作详解

当我们对pecl_manager.php进行ctrl+c时,强行关闭worker,client.php那边仍可正常的发送请求,不过数据都被保存在了mysql中。
当我们重新把worker启动时,gearman会重新载入没有处理的进行处理。

PHP使用gearman进行异步的邮件或短信发送操作详解
我的mysql是装在主机的,虚拟机里装了gearman,如果有朋友发现gearman无法连接mysql,可暂时关闭win10防火墙,和开启win10被ping的回显。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP生成便于打印的网页
Oct 09 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
解析php中die(),exit(),return的区别
Jun 20 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
Laravel实现用户注册和登录
Jan 23 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
Laravel实现表单提交
May 07 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 #PHP
php使用gearman进行任务分发操作实例详解
Feb 26 #PHP
php实现根据身份证获取精准年龄
Feb 26 #PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 #PHP
PHP实现创建一个RPC服务操作示例
Feb 23 #PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 #PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 #PHP
You might like
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
python+pygame简单画板实现代码实例
2017/12/13 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python主线程捕获子线程的方法
2018/06/17 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
python中的测试框架
2020/11/13 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
入党自我评价优缺点
2014/01/25 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
中队活动总结
2014/08/27 职场文书
新生入学欢迎词
2015/01/26 职场文书
会计求职自荐信范文
2015/03/04 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
python 实现的截屏工具
2021/05/08 Python
十个Python自动化常用操作,即拿即用
2021/05/10 Python
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL