php 任务调度框架 Task-Schedule-PHP

GPL
PHP 查看源码»
跨平台
2016-05-30
wsdfbb2004

task-schedule-php

task-schedule-php是一个php任务调度框架,开发者可以使用这个框架来设置周期任务/一次性的延时任务后期异步执行。

动机:

  • 异步/不阻塞:用户操作的时候,服务器端除了和用户交互外,还会通知一些用户感知不到的外部系统,调用这些外部系统比较耗时,无法实时响应。因为这些任务不是主流程。可以将这些任务暂时存储起来,并将任务按照优先级(一般是任务预期执行的时间)进行排序,然后后期顺序执行这些任务,不阻塞主流程。

  • 重复/周期:有些任务任务不仅仅只执行一次,会多次重复性地执行。例如:外部系统的状态发生变化,但是外部系统不会主动地回调/推送通知我们(或者是外部系统主动推送的信道不良),我们会周期性地主动轮询外部系统的状态。

  • 延时处理。

典型的应用场景:

  • 乘客发起一次打车请求,服务器端可以先记录下乘客的打车请求,告知用户打车请求已经受理。服务器端后期想办法逐步将乘客的打车请求通知到周围的司机。

  • 支付系统在收到银行的支付成功回调通知后,先保证将支付状态写入数据库的主流程。然后想办法调用比较耗时的外部系统,将支付成功的消息推送到用户端App。

  • 用户在商户收银台生成一笔支付单后,如果没有在某个时间间隔之内收到银行的支付回调,收银台定期去银行轮询支付结果,直到知道用户在银行已经支付或者是超过最大轮询次数为止。

  • 用户在司机结束行程后,如果在30分钟内没有支付,服务端自动发起一次微信代扣请求。

运行环境

  •  PHP最低版本: 5.3.3.

  •  Redis环境:php需要安装PhpRedis扩展。

  •  Beanstalkd环境:需要beanstalkd的php客户端代码Pheanstalk,Pheanstalk代码已经内置包含在Libs-ThirdParty目录下。

例子

  • 例子程序可以在demo目录下找到。

  • 直接执行php ./demo/startRedis.php

  • 或者php ./demo/startBeanstalkd.php

  • 或者php ./demo/startPhp.php即可。

使用

在目录Core/Handlers目录下编写任务处理函数。

function helloWorld(){
    echo "\n\nhello world\n\n";
    return true;
}

实例化任务调度对象

$redisIp = '10.10.9.77';
$redisPort = '6379';
$redisTimeout = 2;
$redisClient = new \TaskSchedule\Libs\RedisWithReConnect($redisIp, $redisPort, $redisTimeout);

$scheduler = new \TaskSchedule\Core\TaskScheduler\RedisTaskSchedulerWithTransaction($redisClient);
$tasks = new \TaskSchedule\Core\Tasks\RedisTasks($redisClient);
$runner = new \TaskSchedule\Core\TaskRunner($taskResult);
$timeEvent = new \TaskSchedule\Core\TimeEvent\TimeEvent($scheduler, $tasks, $runner);

生产者将该任务添加到计划中。

$timeSpace = 2;
$type = \TaskSchedule\Core\Tasks\TasksInterface::RUN_REPEATED;
$func = 'helloWorld';

//注意,在add任务之前,先初始化下maxTaskId。
$timeEvent->add($timeSpace, $type, $func, $args = null);

消费者获取到任务并执行。

$runTimeLen = 5; 
$timeEvent->loop($runTimeLen);
的码云指数为
超过 的项目
加载中

评论(1)

tomener
tomener
可以看看TimoPHP定时任务

暂无资讯

暂无问答

简单实现定时执行计划任务方法,PHP,JAVA,.Net都可适用

使用Node, MySql在指定时间调用API接口的方式来执行计划任务 https://gitee.com/nickspace/qnick_schedule_task 特点 在node环境里执行。 没必要再去学crontab机制等,按不通系统构建执行计划...

01/12 21:11
1
0
定时器

1、Timer & TimerTask Timer 设置任务执行计划 TimerTask 封装了具体的任务;是一个抽象类;TimerTask是以队列的方式一个一个执行的,所以执行的时间点可能与预期的有差异(前一个任务执行结...

2018/06/10 14:19
6
0
定时任务之Timer

Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,...

2018/05/13 20:48
1
0
SharePoint 2013 Backup Farm Automatically With a Powershell and Windows Task Schedule

In this post,I will show you SharePoint 2013 How to Backup Farm Automatically with a PowerShell and Windows Task Schedule. First,to backup your Farm,you can use the powershell c...

2015/03/02 19:43
8
0
SharePoint 2013 Backup Farm Automatically With a Powershell and Windows Task Schedule

In this post,I will show you SharePoint 2013 How to Backup Farm Automatically with a PowerShell and Windows Task Schedule. First,to backup your Farm,you can use the powershell c...

2015/03/02 19:39
6
0
定时任务Timer/TimerTask和ScheduledExecutorService

在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。下面LZ就其原理、实例以及Timer缺陷三个方面来解析java Timer定时器。 ...

2016/04/18 19:51
7
1
详解java定时任务

在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。下面LZ就其原理、实例以及Timer缺陷三个方面来解析java Timer定时器。 ...

2014/11/01 15:08
29
0
Timer/TimerTask 学习

今天看到在server有用到Timer来不断的更新数据的转台,然后通过消息方式通知前端,感觉还是挺有用处的。 import java.util.Timer; import java.util.TimerTask; public class TimerTest {...

2014/01/15 13:34
225
0
Java Timer的使用(timer.schedule定时执行)(转)

1.概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。 简单的一个例...

2013/12/19 12:03
91
0
Timer和TimerTask详解

1、概述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 TimerTask是一个抽象类,它的子类代表一个可以被Timer计划的任务。 简单的一...

2014/02/25 11:05
365
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部