2011-09-21 34 views

回答

13

使用延期,你首先要定义一个包含要运行的代码的类:

class MyDeferred implements DeferredTask { 
    @Override 
    public void run() { 
     // Do something interesting 
    } 
}; 

就像任何其他的序列化类,你可以有当地人说存储有关任务的相关信息。然后,运行任务,实例化您的类的实例,并把它传递给任务队列API:

MyDeferred task = new MyDeferred(); 
// Set instance variables etc as you wish 
Queue queue = QueueFactory.getDefaultQueue(); 
queue.add(withPayload(task)); 

你甚至可以使用匿名内部类的任务,但在注here描述的警告提防。

+5

可以将这样的东西添加到文档中,以免混淆?我只是错过了将任务添加到队列的部分。文档中的DeferredTaskQueue部分只是一小段。希望这有助于,并感谢您花时间发布此! +1 :) – jmort253

+0

withPaylod方法是什么?无法找到任何地方:( –

+1

'withPayload'是com.google.appengine.api.taskqueue.TaskOptions.Builder.withPayload(DeferredTask) –

1

Java推迟库仍然不在GAE SDK中,这就是为什么你找不到任何官方文档。自2011年3月 此功能要求是固定的,你现在可以使用延迟库straight from the Sdk

您可以使用文斯BONFANTI延迟库可用here

该库的使用相当简单,它是在文档很好的解释:需要

1)递延任务处理程序(servlet的)须于web.xml配置 。

<servlet> 
    <servlet-name>Deferred</servlet-name> 
    <servlet-class>com.newatlanta.appengine.taskqueue.Deferred</servlet-class> 
     <init-param> 
      <param-name>url-pattern</param-name> 
      <param-value>/worker/deferred</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Deferred</servlet-name> 
     <url-pattern>/worker/deferred</url-pattern> 
    </servlet-mapping> 

2)的 “延迟” 队列中需要进行内queue.xml配置(使用你想 任何率:
需要注意的是在init-PARAM必须与实际 url-pattern的匹配)。
如果您在defer()方法中使用可选队列名称,请使用适当的名称创建 队列。

<queue> 
     <name>deferred</name> 
     <rate>10/s</rate> 
    </queue> 

3)创建实现 com.newatlanta.appengine.taskqueue.Deferred.Deferrable interface的类;
doTask这个类的方法是你实现你的任务 逻辑。

4)调用Deferred.defer方法排队你的任务:

DeferredTask task = new DeferredTask(); // implements Deferrable 
    Deferred.defer(task); 

如果任务大小超过10KB,任务选项存储一个 数据存储实体中,该被删除当任务被执行时。

您的doTask方法可以抛出PermanentTaskFailure异常来暂停 重试;任何其他异常都会导致重试任务。

夫妇奖金链接:

  • 功能要求here
  • Google groups thread here
  • Github上Fork
+0

延期[是](http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/taskqueue/DeferredTask.html)Java SDK的一部分。 –

+0

@Nick感谢您指出这一点;我完全错过了功能请求的FIXED状态。老实说,从GAE官方博客开始,我没有看到有关这方面的任何消息。 – systempuntoout