最近工作做的多是活动相关的,活动的上架下架过期等需要定时执行任务来做,总结了下开发流程(流程很重要,和负责人讨论了很久还是没整理清楚,在纸上画一个流程图就清晰多了,这也是我的习惯),如下:
第一步:
活动添加成功后的代码
// 定时执行任务--拼接 执行任务的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张表,一张是记录成功执行的表,一张是记录失败执行的表(这里就不帖上去了)
写的比较乱,还希望多看看流程图,希望大家多指点
相关推荐
2、课程价值本着从解决生产实际问题出发,讲授分布式任务调度的实现方案,本课程采用当当网开源的Elastic-job任务调度产品作为技术方案,从Elastic-job的应用、原理、项目实战三方面进行讲解,通过学习本课程可以...
1.分布式任务调度平台XXL-Job 2.分布式日志采集系统ELK 3.分布式事务解决方案Seta 4.分布式锁解决方案Zookeeper、Redis 5.分布式配置Nacos 6.高并发分布式全局ID生成雪花算法 7.分布式Session使用redis实现 8.分布式...
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能...
总的来说,是将大数据的复杂分布式计算,设计为一个链式的多“包工头”环节去处理,每个环节包括利用多台“农民工”机器进行并行计算,无论是拆分计算任务还是合并结果,都可以设计为一个单独的“包工头”环节。...
总的来说,是将大数据的复杂分布式计算,设计为一个链式的多“包工头”环节去处理,每个环节包括利用多台“农民工”机器进行并行计算,无论是拆分计算任务还是合并结果,都可以设计为一个单独的“包工头”环节。...
taskmaster, 为处理大型任务集而设计的简单分布式队列 TaskmasterTaskmaster是一个简单的分布式队列,用于处理大量的任务。我们在 Disqus 构建了这样的任务来处理频繁但不常见的任务,如"将这里数据迁移到新架构"。...
Rain是一个开源的分布式计算框架,用于处理基于任务的大规模管道。 Rain旨在降低进入分布式计算世界的入门门槛。 我们的目的是提供一个轻便而强大的分布式框架,该框架具有直观的Python API,简单的安装和部署以及...
使用场景:适用于处理大规模数据集的KMeans聚类任务,例如大型数据仓库中的数据分析、大规模网络数据的聚类分析等。 目标:提供并行和分布式实现的KMeans算法,以加速大规模数据集的聚类过程,并能够有效利用集群...
分析了大型分布式冗余数据库的结构、统计与维护应解决的问题,提出了使用大型分布式冗余数据库的应用系统的结构,通过综合运用触发器、存储过程、运行参数与操作系统的任务计划等技术,能使下级及时自动将数据向上维护...
应用范围:分布式操作系统广泛应用于大规模的分布式计算环境,例如云计算平台、大型集群系统和分布式数据库系统等。 2. 多处理机操作系统: 多处理机操作系统是为多处理器系统设计的操作系统。其特点包括: - 并行性...
Ray提供了多种机器学习任务的解决方案,如并行训练、模型服务、分布式训练大型模型、并行超参数调整实验、强化学习和ML平台等。Ray还提供了快速配置和访问云计算资源的功能,利用具有本机和可扩展集成的ML生态系统。...
1. 2003年,Google发布Google File System论文,这是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,提供容错功能。从根本上说:文件被分割成很多块,...
随着云计算的快速发展,大型分布式计算被广泛应用。但是,其运行时的巨大能量消耗已经成为应用推广的难题。目前的节能研究主要提出通过调度来减少服务器的运行数量以节能,而没有考虑网络的能耗。提出的分级调度算法...
分布式数据处理的概念可以追溯到 70 年代中期,当时流行的思想是利用大型设备采用集中信息服务的方式来争取公司信息服务的全面性和综合性。然而,随着规模的扩大,灵活性降低,响应能力减弱,公司开始寻找新的解决...
CPS),并通过移动边缘网络、多智能体协同、群智感知策略等技术实现分布式感知、计算与决策,以应对大型复杂系统的智能化体系构建。 《人工智能》教材第10章-分布式智能全文共30页,当前为第3页。 10.1 分布式人工...
Laxcus分布式操作系统采用新的软件架构,以其超大规模的集群计算和管理能力超越所有操作系统,化解海量计算任务,同时兼容Linux生态。 未来20年,算力就是生产力,也是一切产业的基础,核心的计算和存储工作移向...
与一个大型计算机支持一个大型的冀中是数据库在加一些进程和远程终端相比,由超级微型计算机或超级小型计算机支持的分布式数据库系统往往具有更高的性价比和实施灵活性。分布式系统比集中式系统具有更高的可靠性和更...
该系统采用分布式黑板和多智能体系统的类人智能机器人控制系统结构,能够有效地实现预定的装配任务。该系统由多个智能体组成,每个智能体具有不同的功能特点和协作关系。通过CORBA技术,实现了软件系统的开发。 该...
Apache Horn 是 Apache 的一个孵化项目,是一个以神经元为中心的编程模型和同步、异步混合的分布式训练框架,支持数据和模型并行性,用于在 Apache Hadoop 和 Hama 训练具有大量数据集的大型模型。快速运行示例下载 ...
临时选举的主席根据骨干树对管理域进行自动划分,并由管理设备骨干树上的多管理设备使用简单的路由机制协同工作,完成大型网络管理几大功能域的需求,如分布式拓扑发现、多管理设备间多性能任务调度和故障通报等。