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 11 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
laravel-admin select框默认选中的方法
Oct 03 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
Terran建筑一览
2020/03/14 星际争霸
PHP对象Object的概念 介绍
2012/06/14 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
鼠标选择动态改变网页背景颜色的JS代码
2013/12/10 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
详解Bootstrap插件
2016/04/25 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
Python实现各种排序算法的代码示例总结
2015/12/11 Python
详解Python编程中基本的数学计算使用
2016/02/04 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
python高级特性简介
2020/08/13 Python
合作意向书范本
2014/03/31 职场文书
公司离职证明样本
2014/09/13 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
色戒观后感
2015/06/12 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL