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 相关文章推荐
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
PHP采集类Snoopy抓取图片实例
Jun 19 PHP
浅谈php命令行用法
Feb 04 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
ThinkPHP发送邮件示例代码
Oct 08 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
PHP获取MySQL执行sql语句的查询时间方法
Aug 21 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
Python的ORM框架SQLObject入门实例
2014/04/28 Python
讲解Python中的递归函数
2015/04/27 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
毕业生的自我鉴定
2013/10/29 职场文书
法制宣传日活动总结
2014/04/29 职场文书
房地产广告策划方案
2014/05/15 职场文书
大学新闻系自荐书
2014/05/31 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
小学生差生评语
2014/12/29 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis