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实现读取和编写XML DOM代码
Apr 07 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
python实现简单的学生管理系统
2021/02/22 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
骨干教师培训方案
2014/05/06 职场文书
村级换届选举方案
2014/05/10 职场文书
法制教育演讲稿
2014/09/10 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
红楼梦读书笔记
2015/06/25 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
Python中22个万用公式的小结
2021/07/21 Python
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers