我对Java DeferredTask的文档有点困惑。我已阅读Python文档:http://code.google.com/appengine/articles/deferred.html,但我不清楚我将如何使用Java版本。Java GAE DeferredTask示例?
你能否提供工作示例代码来启动DeferredTask以使用DatastoreService进行简单写入?
我对Java DeferredTask的文档有点困惑。我已阅读Python文档:http://code.google.com/appengine/articles/deferred.html,但我不清楚我将如何使用Java版本。Java GAE DeferredTask示例?
你能否提供工作示例代码来启动DeferredTask以使用DatastoreService进行简单写入?
使用延期,你首先要定义一个包含要运行的代码的类:
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描述的警告提防。
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
异常来暂停 重试;任何其他异常都会导致重试任务。
夫妇奖金链接:
延期[是](http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/taskqueue/DeferredTask.html)Java SDK的一部分。 –
@Nick感谢您指出这一点;我完全错过了功能请求的FIXED状态。老实说,从GAE官方博客开始,我没有看到有关这方面的任何消息。 – systempuntoout
可以将这样的东西添加到文档中,以免混淆?我只是错过了将任务添加到队列的部分。文档中的DeferredTaskQueue部分只是一小段。希望这有助于,并感谢您花时间发布此! +1 :) – jmort253
withPaylod方法是什么?无法找到任何地方:( –
'withPayload'是com.google.appengine.api.taskqueue.TaskOptions.Builder.withPayload(DeferredTask) –