2011-09-21 31 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