讲-队列应用场景 自己实现队列.pptx

Drupal框架应用与设计理念?;大纲: 1:队列使用场景:为什么需要队列 2:普通工程师的解决方案和架构师的解决方案 3:队列总体设计 4:队列具体实现一:建任务存储表 5:队列具体实现二:定义调用接口 6:队列具体实现三:写执行队列的程序 7:具体业务任务的程序实现 8:服务器部署一:配置crontab 9:服务器部署二:写定时任务调度程序 10:开启多进程并发执行队列 11:实现任务优先级 12:记录队列日志 13:作业:利用队列系统实现定时执行的任务 ;一 :队列使用场景:为什么需要队列 场景一:电商网站订单通知 场景二:社交网站群发消息 ;二 :普通工程师的解决方案和架构师的解决方案 方案1:建表存邮件,消息等,用定时程序取出发送。 方案2:抽象到更高一层,开发一套通用异步处理队列适用于任何复杂的业务逻辑 ;三 :队列总体设计 1:需要队列程序,提供加入队列接口和取队列接口等 2:需要存储队列,文件或者数据库 3:需要定时程序取出队列并执行 4:其它扩展功能:优先级,日志,定时等 ;四 :队列具体实现一:建任务存储表 1: 先来个最基本的: CREATE TABLE `queue` ( id int(11) NOT NULL auto_increment primary key, taskphp varchar(128) NOT NULL default , param text not null default , status tinyint not null default 0, ctime timestamp NOT NULL default CURRENT_TIMESTAMP, KEY (ctime) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ;五 :队列具体实现二:定义调用接口 $cqueue = new Queue(); 1: 加入队列接口 //$param1 为执行任务的程序,$param2 为程序参数,可以为序列化的数据 $cqueue-add($param1,$param2); 2: 读取队列接口 $tasks = $cqueue-getQueueTask($limit = 1000); 3:更新任务状态 $cqueue-updateTaskStatus($id); ;六 :队列具体实现三:写执行队列的程序 do_queue.php部分代码: $phpcmd = exec(which php); $cqueue = new Queue(); $tasks = $cqueue-getQueueTask(200); foreach ($tasks as $t) { $taskphp = $t[taskphp]; $param = $t[param]; $job = $phpcmd . . escapeshellarg($taskphp) . . escapeshellarg($param); system($job); } ;七 :具体任务的业务实现 这个一般由做业务功能的工程师实现。但是架构师事先得写文档例子,教会别人使用 send_msg.php: $para = $argv[1]; $arr = unserialize($para); $cmessage = new Message(); foreach($arr[uids] as $touid) { $cmessage-send($arr[uid], $touid, $arr[content]); } ;八 : 服务器部署一:配置crontab 配置定时任务 crontab: crontab –e * * * * * cd /ucai/schedule; php cron_mission.php cron_mission.log ;九 :服务器部署二:写定时任务调度程序 cron_mission.php 示例: if ($minute % 5 == 0) { if(chdir($site_dir.app/)) { $cmd = $phpcmd do_queue.php do_queue.log ; echo [ , $ymd , , $hour , : , $minute , ] , $cmd , \n; system($cmd); } } ;十 :开启多进程并发执行队列 1:定时任务的修改 2:队列执行程序的修改 3:取队列接口的修改 4:需要关注

文档评论(0)

1亿VIP精品文档

相关文档