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中的实现trim函数代码
Mar 19 PHP
PHP 身份证号验证函数
May 07 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
Sep 21 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
php实现构建排除当前元素的乘积数组方法
Oct 06 PHP
php用xpath解析html的代码实例讲解
Feb 14 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 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
对盗链说再见...
2006/10/09 PHP
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
php读取excel文件的简单实例
2013/08/26 PHP
smarty自定义函数用法示例
2016/05/20 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
js实现随机抽奖
2020/03/19 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
python抽象基类用法实例分析
2015/06/04 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python 如何区分return和yield
2020/09/22 Python
java关于string最常出现的面试题整理
2021/01/18 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
管理心得体会
2013/12/28 职场文书
安全生产实施方案
2014/02/23 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
七个非常实用的Python工具包总结
2021/06/15 Python