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格式化工具Beautify PHP小小BUG
Apr 24 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
PHP句法规则详解 入门学习
Nov 09 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
重新认识php array_merge函数
Aug 31 PHP
php操作mongoDB实例分析
Dec 29 PHP
PHP开发注意事项总结
Feb 04 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
Yii中srbac权限扩展模块工作原理与用法分析
Jul 14 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 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
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
js代码实现轮播图
2020/05/04 Javascript
python决策树之CART分类回归树详解
2017/12/20 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
python中eval与int的区别浅析
2019/08/11 Python
基于Python绘制个人足迹地图
2020/06/01 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
应付会计岗位职责
2013/12/12 职场文书
党课学习思想汇报
2014/01/02 职场文书
教育学习自我评价
2014/02/03 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
志愿者事迹材料
2014/12/26 职场文书
电影雨中的树观后感
2015/06/15 职场文书
MySQL查询日期时间
2022/05/15 MySQL
linux目录管理方法介绍
2022/06/01 Servers
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers