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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
cakephp打印sql语句的方法
Feb 13 PHP
php定义参数数量可变的函数用法实例
Mar 16 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 PHP
PHP xpath提取网页数据内容代码解析
Jul 16 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
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
js实现微博发布小功能
2017/01/12 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
python 日期操作类代码
2018/05/05 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python 瀑布线指标编写实例
2020/06/03 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
python sleep和wait对比总结
2021/02/03 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
年终自我鉴定
2013/10/09 职场文书
公司司机岗位职责
2014/02/07 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
倡议书范文大全
2015/04/28 职场文书
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫