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 相关文章推荐
Windows中安装Apache2和PHP4权威指南
Nov 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
Jun 24 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
解决php写入数据库乱码的问题
Sep 17 PHP
laravel 解决crontab不执行的问题
Oct 22 PHP
PHP实现页面静态化深入讲解
Mar 04 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
第三节 定义一个类 [3]
2006/10/09 PHP
PHP session有效期问题
2009/04/26 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
PHP合并静态文件详解
2014/11/14 PHP
php递归函数怎么用才有效
2018/02/24 PHP
php判断目录存在的简单方法
2019/09/26 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
js的2种继承方式详解
2014/03/04 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
webpack多页面开发实践
2017/12/18 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
python创建n行m列数组示例
2019/12/02 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
英国足球店:UK Soccer Shop
2017/11/19 全球购物
毕业生就业推荐信范文
2013/12/01 职场文书
大学总结自我鉴定
2014/01/18 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
初中教师个人工作总结
2015/02/10 职场文书
财务人员入职担保书
2015/09/22 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
Golang 入门 之url 包
2022/05/04 Golang