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 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
PHP命名空间(namespace)的使用基础及示例
Aug 18 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
Adnroid 微信内置浏览器清除缓存
Jul 11 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
python实现自动更换ip的方法
2015/05/05 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
python编写弹球游戏的实现代码
2018/03/12 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python实现图片文件批量重命名
2020/03/23 Python
python实现名片管理系统
2018/11/29 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
公司司机岗位职责范本
2014/03/03 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
整理Python中常用的conda命令操作
2021/06/15 Python
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers