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 静态化实现代码
Mar 20 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
详解PHP错误日志的获取方法
Jul 20 PHP
为你总结一些php系统类函数
Oct 21 PHP
php中二分法查找算法实例分析
Sep 22 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
解决php写入数据库乱码的问题
Sep 17 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
如何用JavaScript动态呼叫函数(两种方式)
2013/05/03 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
python实现井字棋游戏
2020/03/30 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
python flask实现分页的示例代码
2018/08/02 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
WiFi云数码相框:Nixplay
2018/07/05 全球购物
社区食品安全实施方案
2014/03/28 职场文书
三万活动总结
2014/04/28 职场文书
岗位说明书怎么写
2014/07/30 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
2014年市场部工作总结
2014/11/25 职场文书
《正比例》教学反思
2016/02/23 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android