Java GAE延迟任务示例?
我对Java DeferredTask的文档有点困惑。我已经阅读了这里的Python文档:但我不清楚如何使用Java版本 您能否提供启动延迟任务的工作示例代码,以便使用DatastoreService执行简单的写入操作?Java延迟库仍然不在GAE SDK中,这就是您找不到任何官方文档的原因。 此功能请求自2011年3月起已修复,您现在可以使用延迟库 您可以使用可用的Vince Bonfanti延迟库 库的使用相当简单,文档中对此进行了详细解释: 1)需要配置延迟任务处理程序(servlet) 在Java GAE延迟任务示例?,java,google-app-engine,Java,Google App Engine,我对Java DeferredTask的文档有点困惑。我已经阅读了这里的Python文档:但我不清楚如何使用Java版本 您能否提供启动延迟任务的工作示例代码,以便使用DatastoreService执行简单的写入操作?Java延迟库仍然不在GAE SDK中,这就是您找不到任何官方文档的原因。 此功能请求自2011年3月起已修复,您现在可以使用延迟库 您可以使用可用的Vince Bonfanti延迟库 库的使用相当简单,文档中对此进行了详细解释: 1)需要配置延迟任务处理程序(servlet)
web.xml
中请注意,init参数必须与实际值匹配 url模式: 3)创建一个实现
com.newatlanta.appengine.taskqueue.Deferred.delferrable接口
此类的
doTask
方法是您实现任务的地方
逻辑
4)调用Deferred.Deferred
方法将任务排队:
如果任务大小超过10KB,则任务选项存储在
数据存储实体,在执行任务时删除
您的doTask
方法可以抛出PermanentTaskFailure
异常以停止
重试;任何其他异常都会导致重试该任务
两个奖励链接:
- 功能请求李>
- 谷歌群组线程
- Github
- 要使用deferred,首先必须定义一个包含要运行的代码的类:
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));
您甚至可以在任务中使用匿名内部类,但请注意注释中所述的注意事项。Java SDK的延迟部分。@Nick感谢您指出这一点;我完全错过了功能请求的固定状态。老实说,从GAE官方博客开始,我还没有读到任何关于这方面的公告。像这样的东西可以添加到文档中以减少混乱吗?我只是错过了将任务添加到队列的部分。文档中关于DeferredTaskQueue的部分只是一小段。希望这对你有所帮助,谢谢你花时间发布这篇文章+1:)withPaylod方法是什么?在任何地方都找不到它:(“withPayload”是com.google.appengine.api.taskqueue.TaskOptions.Builder.withPayload(DeferredTask)
DeferredTask task = new DeferredTask(); // implements Deferrable
Deferred.defer( task );
class MyDeferred implements DeferredTask {
@Override
public void run() {
// Do something interesting
}
};
MyDeferred task = new MyDeferred();
// Set instance variables etc as you wish
Queue queue = QueueFactory.getDefaultQueue();
queue.add(withPayload(task));