如何在任何事务之外排队任务

时间:2013-08-28 19:23:44

标签: java google-app-engine transactions task-queue

我想

  1. 启动Google appengine交易
  2. 创建任务并将其排入队列(在任何事务之外)
  3. 通过提交或丢弃交易来关闭交易
  4. 如何在Java中执行事务外的#2?

    动机主要是为了避免5个任务的限制。

2 个答案:

答案 0 :(得分:2)

您可以对以下Queue.add方法的变体使用null tr​​ansaction参数。

add(Transaction txn, TaskOptions taskOptions)

这在Queue interface documentation的顶部进行了解释。它将使任务独立于活动事务的成功或失败。

但是,即使事务失败,如果您真的不关心排队任务,也可以在事务中的列表中创建TaskOptions对象,然后在事务完成后将它们排入一个调用中。这样,您就不会产生在事务中添加队列的延迟成本。

答案 1 :(得分:0)

一个选项可能是:

  1. 附加到事务中的单个任务数据有效内容。每增加一块数据就适合自己的任务。
  2. 在提交事务之前,使用聚合任务有效内容将一个任务排入队列。
  3. 执行一个事务性任务。它将数据有效负载分解为您排队的单独新任务。
  4. 每个enqueud任务都会执行。
  5. 合适的? (您需要验证事务任务本身可以排队非事务性的任务。)