Java GAE延迟任务示例?

Java GAE延迟任务示例?,java,google-app-engine,Java,Google App Engine,我对Java DeferredTask的文档有点困惑。我已经阅读了这里的Python文档:但我不清楚如何使用Java版本 您能否提供启动延迟任务的工作示例代码,以便使用DatastoreService执行简单的写入操作?Java延迟库仍然不在GAE SDK中,这就是您找不到任何官方文档的原因。 此功能请求自2011年3月起已修复,您现在可以使用延迟库 您可以使用可用的Vince Bonfanti延迟库 库的使用相当简单,文档中对此进行了详细解释: 1)需要配置延迟任务处理程序(servlet)

我对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));