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 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
php中Smarty模板初体验
Aug 08 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
基于php无限分类的深入理解
Jun 02 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
thinkphp实现分页显示功能
Dec 03 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
弹出模态框modal的实现方法及实例
Sep 19 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
优化PHP代码技巧的小结
2013/06/02 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python创造虚拟环境方法总结
2019/03/04 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
python logging.info在终端没输出的解决
2020/05/12 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
英国精品买手店:Browns Fashion
2016/09/29 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
军校大学生个人的自我评价
2014/02/17 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
素质教育标语
2014/06/27 职场文书
公司开除员工通知
2015/04/22 职场文书
教师节班会主持词
2015/07/06 职场文书