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 相关文章推荐
第五节--克隆
Nov 16 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
php实现字符串翻转的方法
Mar 27 PHP
ThinkPHP使用Smarty第三方插件方法小结
Mar 19 PHP
PHP实现的文件操作类及文件下载功能示例
Dec 24 PHP
浅谈PHP安全防护之Web攻击
Jan 03 PHP
Yii2数据库操作常用方法小结
May 04 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 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 clearstatcache()函数详解
2010/03/02 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
Python中的自定义函数学习笔记
2014/09/23 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
技能竞赛活动方案
2014/02/21 职场文书
2014年图书室工作总结
2014/12/09 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
外出听课学习心得体会
2016/01/15 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
python脚本框架webpy模板控制结构
2021/11/20 Python
MySQL数据库事务的四大特性
2022/04/20 MySQL