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 相关文章推荐
C# Assembly类访问程序集信息
Jun 13 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
Mar 07 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
Laravel学习教程之从入口到输出过程详解
Aug 27 PHP
PHP实现验证码校验功能
Nov 16 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
基于mysql的bbs设计(五)
2006/10/09 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
django1.8使用表单上传文件的实现方法
2016/11/04 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
基于python实现名片管理系统
2018/11/30 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
写给女生的道歉信
2014/01/14 职场文书
面试后的英文感谢信
2014/02/01 职场文书
五一劳动节活动记录
2014/03/23 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
公司员工奖惩制度
2015/08/04 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
python_tkinter弹出对话框创建
2022/03/20 Python