任务队列服务上线

TaskQueue服务介绍

为了满足很多SAE开发者的需求,我们优先开发了taskqueue服务,并于今日上线。

taskqueue是一个高可靠的分布式web任务队列服务,用户可以将需要分批执行的任务交由taskqueue离线处理,而不用再担心等待批量任务返回结果导致的超时。

比如,如果需要给若干用户发微博,那么使用taskqueue就可以异步的将需要执行的任务放入queue中,然后由taskqueue在后端异步的处理。

创建队列

使用taskqueue服务执行,开发者需要登录在线管理平台,并进入服务管理=>taskqueue,先创建队列。taskqueue目前的队列分成两大类,顺序队列和并发队列:

一些概念:
顺序队列:并发度为1,以保证任务可以按照进入队列的先后顺序依次执行
并发队列:并发度>1,进入队列的任务将按并发度并行执行,不保证严格有序
并发度:负责处理该队列的worker数量,worker越多处理的越快
worker:负责处理任务,并执行web请求
最大长度:当队列worker处理较慢,队列发生阻塞时,允许队列的最大长度,当队列达到最大长度时,新的任务将不能进入队列,直到有旧任务从队列中消费出去为止
任务:taskqueue目前只支持web任务,任务的执行可以用GET或者POST方式,用户负责对格式做拼装和解析

队列属性还有一个“失败回调URL”,指的是:当该任务执行失败时,回调的URL地址,如果用户制定了该地址,SAE会将原请求的url上增加原请求地址后原封不动再发送给回调URL,如:

用户原http请求(GET):http://kobe.sinaapp.com/a.php

用户指定了失败回调URL:http://kobe.sinaapp.com/error_callback.php

则当taskqueue失败时得到的回调是:http://kobe.sinaapp.com/error_callback.php?url=http://kobe.sinaapp.com/a.php

如果原请求为POST方式,则post段内容不变。

用户可以根据自身的需要创建不同属性的队列,如果对顺序性要求强烈,可以选择顺序队列,如果对处理速度要求强烈,可以选择并发大的并发队列;如果任务执行较慢,可能发生拥堵,则最好选择队列最大长度较大的队列。

使用队列

创建完队列后,就可以通过SAE std lib通过函数调用taskqueue了,如:

$queue = new SaeTaskQueue('test');//此处的test队列需要在在线管理平台事先建好

//添加单个任务
$queue->addTask("http://freedemo.sinaapp.com/yourtask1.php");
$queue->addTask("http://freedemo.sinaapp.com/yourtask2.php", "postdata", true);

//批量添加任务
$array = array();
$array[] = array('url'=>"http://freedemo.sinaapp.com/yourtask1.php", "postdata"=>"act=test");
$array[] = array('url'=>"http://freedemo.sinaapp.com/yourtask2.php", "postdata"=>"act=test", "prior"=>true);
$queue->addTask($array);

//将任务推入队列
$ret = $queue->push();
var_dump($ret);

具体API函数参考请见,http://apidoc.sinaapp.com/sae/SaeTaskQueue.html

Comment

  • Trackback are closed
  • Comments (4)
  1. 沙发啊~~~SAE 交流 QQ群号:41674533

    • xLight
    • 06/08. 2010 11:46上午

    没说说 “等级”是怎么回事呢?
    难道是。。。还没想好怎么实现??

  2. 求个邀请码啊……邮箱oeetee@gmail.com

  3. 请给一个邀请码吧~~~molisoft@qq.com

Comment are closed.