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编程实现获取excel文档内容的代码实例
Jun 28 PHP
PHP抽象类 介绍
Jun 13 PHP
3个PHP多维数组转为一维数组的方法实例
Mar 13 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
帝国cms目录结构分享
Jul 06 PHP
PHP云打印类完整示例
Oct 15 PHP
替换php字符串中的单引号为双引号的方法
Feb 16 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
php封装的page分页类完整实例代码
Feb 01 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP发送短信代码分享
2015/08/11 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
jQuery 跨域访问解决原理案例详解
2016/07/09 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Python中的类与对象之描述符详解
2015/03/27 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
python如何使用腾讯云发送短信
2020/09/17 Python
彻底解决Python包下载慢问题
2020/11/15 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
护理专业学生职业生涯规划范文
2014/03/11 职场文书
教师新年寄语
2014/04/03 职场文书
企业安全生产规章制度
2015/08/06 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android
python pygame 开发五子棋双人对弈
2022/05/02 Python
Web应用开发TypeScript使用详解
2022/05/25 Javascript
python库Tsmoothie模块数据平滑化异常点抓取
2022/06/10 Python