PHP-消息队列
来源:互联网 发布:床垫选择 知乎 编辑:程序博客网 时间:2024/05/30 19:34
以邮箱发送队列为例子说明,以下使用的是thinkphp框架的代码,消息队列类似
1) 新增队列表
DROPTABLE IF EXISTS `ls_task_email`;
CREATETABLE IF NOT EXISTS `ls_task_email` (
`task_email_id` int(11) NOT NULLAUTO_INCREMENT,
`user_email` varchar(255) NOT NULL COMMENT '邮箱',
`user_name` varchar(255) NOT NULL COMMENT '用户名',
`subject` varchar(255) NOT NULL COMMENT '标题',
`body` text NOT NULL COMMENT '内容',
`attachment` text NOT NULL COMMENT '发送附件',
`status` int(11) NOT NULL COMMENT '1:发送成功,-1:发送失败',
`add_time` timestamp NOT NULL DEFAULTCURRENT_TIMESTAMP,
`update_time` int(11) NOT NULL,
PRIMARY KEY (`task_email_id`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='邮箱队列任务表' AUTO_INCREMENT=1 ;
2) 在对应需要发送消息的位置,插入队列数据,也就是新增表数据
3) 前台界面异步请求消息发送接口,在发送消息的位置,获取队列表中的任务队列,每次获取5-10条发送
$taskEmail = M('task_email');while(true) {$task_email_list = $taskEmail->where('status=0')->order('task_email_id ASC')->limit(5)->select();if(empty($task_email_list)) {break;} else {foreach($task_email_list as $k => $v) {$send_result = send_mail($v['user_email'], $v['user_name'], $v['subject'], $v['body'], $v['attachment']); $update_email_data = array( 'status'=>(true == $send_result ? 1 : -1), 'update_time'=>time(), 'error_info'=>(true == $send_result ? '' : $send_result), ); $taskEmail->where('task_email_id='.$v['task_email_id'])->save($update_email_data); sleep(3); }}}
4) 使用while(1)循环发送消息,修改任务状态后,使用sleep(3)控制发送间隔时间,如果队列为空则跳出while循环
5) 如果需要同时发送多个消息队列的消息,需要在PHP中处理,不能在前台调用多个$.post请求不同的消息队列【此方法调用,需要使用服务器定时任务处理】
- php RabbitMQ消息队列
- php消息队列
- php 实现消息队列
- 1.PHP 消息队列
- php消息队列
- PHP消息队列
- PHP消息队列
- PHP-消息队列
- php消息队列beanstalkd使用
- Php +Redis 做消息队列
- php消息队列的应用
- Php +Redis 做消息队列
- 消息队列-RabbitMq(PHP)
- Php +Redis 做消息队列
- 消息队列-RabbitMq(PHP)
- php+redis实现消息队列
- PHP消息队列实现笔记
- RabbitMQ+PHP消息队列系统
- 小学奥数思维训练题(四)
- 4.ES6块级作用域
- 互联网金融
- 总结Object的方法
- 实现对象的复用——享元模式(一)
- PHP-消息队列
- 第23章 向碧蓝的苍穹致敬——三维天空的构建
- 把spring-boot项目部署到tomcat容器中
- 自己写的原生js轮播图插件
- 纯css做的开关
- 数据库管理技术
- 【错误解决】SpringBoot启动错误
- Qt 背景图片设置以及QT Style Sheets
- 搜狗商业平台Java技术实践