我對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) –