`

大型分布式网站之计划任务

阅读更多

最近工作做的多是活动相关的,活动的上架下架过期等需要定时执行任务来做,总结了下开发流程(流程很重要,和负责人讨论了很久还是没整理清楚,在纸上画一个流程图就清晰多了,这也是我的习惯),如下:



 

第一步:

活动添加成功后的代码

// 定时执行任务--拼接 执行任务的url (我的api下的Mq类的checkActivityTime方法,该方法是判断当前时间和活动时间比较是否过期)

$url = 'http://'.$_SERVER['SERVER_NAME'].'/Api-Mq-checkActivityTime-vcid-'.$id;

// 调取公共执行方法(期望执行时间)

$request_time = isset($_REQUEST['end_time']) ? strtotime($_REQUEST['end_time']) : '';

BM("Mq")->curlMqUrl($url,$request_time); // 这里请求代码封装了(代码在下面)

// *****************请求封装  start**************

第二步:请求封装的代码如下:

/**

 +------------------------------------------------------------------------------

 * 定时任务

 +------------------------------------------------------------------------------

 * $Author: haibo $

 * $Revision: 83 $ 

 +------------------------------------------------------------------------------

 */

class Mq{

    //  执行mq定时任务的url

        // 类Mq的index作用(代码如下)是将拼接的url入数据库 方便python读取调用

const MQPOST_URL       ='http://xxx.cn/api/?method=mq.index';

 

 /*

  * 活动添加后 定时执行(活动到期判断)

 * 2016/4/25

 * By haibo_chen

 */

 public function curlMqUrl($paramurl,$endtime){

 

 $url = self::MQPOST_URL;

 $params['url'] = $paramurl;

 $params['request_time'] = $endtime;

 $result = $this->apiPostData($params,$url);

 if($result){

 return $result;

 }else{

 $this->mqCircleThree($paramurl);  // 执行失败,继续请求2次

 }

 }

 

 /*

  *定时执行失败  再次请求2次(加之前一次 共计3次)

 * 2016/4/25

 * By haibo_chen

 */

 private function mqCircleThree($paramurl){

 for($i=1;$i<=2;$i++){

 $url = self::MQPOST_URL;

 $params['url'] = $paramurl;

 $this->apiPostData($params,$url);

 }

 }

 

 /*

  * post接受api接口

 * haibo

 * @param  string  $params json参数

 *

 */

 public function apiPostData($params,$url)

 {

 $post_url = $url;

 $ch = curl_init();

 curl_setopt($ch, CURLOPT_URL, $post_url);

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

 curl_setopt($ch, CURLOPT_POST, true);

 curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

 $response = curl_exec($ch);

 return json_decode($response,true);

 }

}

// ****************请求封装  end******************

第三步:将请求数据入库

// +++++++++++定时执行的即将请求链接数据入库 -接口 start++++++++++

http://xxx.cn/api/?method=mq.index'

class MqAction extends BaseAction{

 

public function index() {

 

$request_time = microtime(true);

 

//$_POST['url'] = 'http://xxxxx.cn/?g=admin&m=activity&a=check_activitypassed&actid=12';

 

$url = $_POST['url'];

// 接收插入数据

if(!trim($url)) {

$this->response(array(),201,'请求链接不能为空!');

}

 

// 请求数据 入库

$data['request_url']  = trim($url);

$data['request_time'] = $_POST['request_time'];

$data['create_time']   = time();

$result = D("timinglog")->add($data);

        if($result) {

            $this->response(array(),200,'记录入库成功');

        }else{

            $this->response(array(),203,'记录入库失败');

        }

}

}



 

//+++++++++++end++++++++++++

第四步:编写参数链接里的方法checkActivityTime(判断是否过期)

/*

     * 定时执行任务url方法(判断众筹/服务 是否过期/有效)

    * 2016/5/11

    * By haibo_chen

    */

    public function checkActivityTime(){

    $vcid = isset($_GET['vcid']) ? intval($_GET['vcid']) : '';

    if(!$vcid){

    echo 'fail';exit;

    }

    $map['vc_id'] = $vcid;

    $venueinfo = M("venue_crowd")->where($map)->find();

    if($venueinfo['end_time'] < time()){ // 过期

    $data['status'] = 3;  // 0进行中   1已成功   2已满   3已结束

    $result = D("venue_crowd")->where(array("vc_id" => $vcid))->save($data);

    if($result){

    echo 'success';exit;

    }else{

    echo 'fail';exit;

    }

    }

    }

// 第五步就交给python了

其实还需要再建立2张表,一张是记录成功执行的表,一张是记录失败执行的表(这里就不帖上去了)

写的比较乱,还希望多看看流程图,希望大家多指点

 

  • 大小: 96.3 KB
  • 大小: 22.1 KB
分享到:
评论

相关推荐

    大型分布式网站架构

    在构建大型分布式网站架构时,我们面临的主要挑战是如何处理高并发访问、数据存储与处理的扩展性、系统可用性和容错性。以下是对这些关键知识点的详细解释: 1. 分布式架构基础: 分布式架构是将单一应用程序拆分...

    大型分布式网站架构设计与实践.pdf

    从给定的信息来看,本文档将重点探讨大型分布式网站架构的设计与实践,旨在为读者提供一个全面、深入的理解。由于给定的部分内容并未提供具体的技术细节,因此本篇内容将根据标题、描述以及标签来进行扩展。 ### ...

    大型分布式网站架构设计与实践.rar

    《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展的大型网站架构的专业书籍。在当今数字化时代,随着互联网业务的飞速发展,单体应用已无法满足日益增长的用户需求和流量压力,因此分布式系统...

    大型分布式网站架构设计与实践.7z

    在构建大型分布式网站架构时,Java作为一种广泛应用的编程语言,起着至关重要的作用。本资料“大型分布式网站架构设计与实践”深入探讨了如何利用Java技术来构建可扩展、高可用性和高性能的互联网应用。 首先,...

    《大型分布式网站架构设计与实践》

    《大型分布式网站架构设计与实践》是一本深入探讨如何构建和优化大规模分布式系统的权威书籍。在互联网技术高速发展的今天,大型分布式网站已经成为支撑各种在线业务的核心。本书详细阐述了从概念到实施,从理论到...

    大型分布式网站架构设计与实践

    《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展、高可用性的分布式网站架构的专业书籍。在互联网行业中,随着用户量的急剧增长和业务需求的复杂化,传统的单体架构已无法满足需求,分布式系统...

    大型分布式网站架构设计 完整版 pdf 百度云链接

    根据提供的文件信息,我们可以推断出这份文档主要讨论的是“大型分布式网站架构设计”的相关内容,并且提供了一个百度云的下载链接。接下来,我们将基于这些信息深入探讨与大型分布式网站架构设计相关的几个关键知识...

    大型分布式网站架构设计与实战

    《大型分布式网站架构设计与实战》是一本专为架构师量身打造的指南,它深入探讨了在构建大规模、高并发、高可用的互联网应用时所面临的挑战和解决方案。本书内容丰富,涵盖了从理论到实践的诸多方面,旨在帮助读者...

    大型分布式网站架构设计与实践.带目录书签.完整版

    《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展、高可用性的分布式网站架构的专业书籍。在当今互联网行业中,随着用户数量的急剧增长和业务复杂度的不断提升,传统的单体架构已无法满足需求,...

    凤凰架构:构建可靠的大型分布式系统.pdf

    《凤凰架构:构建可靠的大型分布式系统》是一本开源文档,其核心在于为技术人员提供一个构建可信赖的大型分布式软件系统的框架和方法论。分布式系统是一类由多个组件构成的系统,这些组件分散在不同的网络节点上,...

    大型分布式网站架构设计与实践.带目录书签.完整版.pdf

    《大型分布式网站架构设计与实践》是一本由阿里巴巴专业人员编著的书籍,它深入探讨了构建和优化大型分布式网站架构的关键技术和实践经验。本书旨在帮助读者理解和掌握在高并发、大数据量背景下,如何通过分布式系统...

    大型电商分布式系统实践

    最后,Zookeeper作为一个协调系统,在大型分布式系统中扮演着重要角色。Zookeeper主要用于服务的动态注册和状态管理,提供配置维护、名字服务、分布式同步和组服务等功能。Zookeeper可作为集群形式存在,通过Zab协议...

    大型分布式网站架构设计与实践.带目录书签.完整版(jb51.net).pdf

    《大型分布式网站架构设计与实践》是一本深入探讨构建大规模分布式网站核心技术的书籍。它涵盖了从理论到实践的广泛知识,旨在帮助读者理解和掌握在高并发、大数据量环境下,如何设计和实施高效的分布式系统。 ...

    大型分布式网站架构设计与实践高清扫描中文版

    《大型分布式网站架构设计与实践》是一本深入探讨如何构建高效、可扩展、高可用性的分布式网站架构的专业书籍。本书涵盖了分布式系统的基础理论、设计原则以及实战经验,旨在帮助读者理解并掌握大型网站背后的技术...

    大型分布式网站架构设计与实践。带目录书签

    在构建大型分布式网站架构时,我们面临的主要挑战是如何处理高并发、海量数据和高可用性。本资料"大型分布式网站架构设计与实践"深入探讨了这些关键问题,并提供了实用的解决方案。以下是根据标题和描述提炼出的一些...

    大型分布式系统java应用

    在IT行业中,Java语言因其平台无关性、丰富的库支持以及高效性能,在构建大型分布式系统方面扮演着重要角色。本文将深入探讨大型分布式系统中的Java应用,包括其核心概念、技术框架以及实现策略。 首先,我们要理解...

Global site tag (gtag.js) - Google Analytics