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 相关文章推荐
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
PHP $_FILES函数详解
Mar 09 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
php网页病毒清除类
Dec 08 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
PHP实现的简单异常处理类示例
May 04 PHP
详解thinkphp中的volist标签
Jan 15 PHP
php常用的工具开发整理
Sep 26 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
Sep 13 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
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
php 中的closure用法详解
2017/06/12 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
详解vue axios二次封装
2018/07/22 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
python计算牛顿迭代多项式实例分析
2015/05/07 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
Linux机考试题
2015/07/17 面试题
临床医学应届生求职信
2013/11/06 职场文书
商务考察邀请函范文
2014/01/21 职场文书
税务干部鉴定材料
2014/02/11 职场文书
三字经教学反思
2014/04/26 职场文书
作风转变年心得体会
2014/10/22 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书