2009-11-18 363 views
4

我正在查看Google App Engine的Java新任務隊列API,我很難將其與我的GWT應用程序相關聯。如果我想使用任務隊列來執行一些異步處理,那麼我應該如何使用GWT來做到這一點。GWT上的Google App Engine任務隊列

我看到它的方式是,我必須發送一個服務器請求,然後提交到任務隊列API。如果我正確理解任務隊列,就必須創建另一個servlet來從任務隊列(作爲工作者)執行處理。

我在尋找兩件事情:

  1. 請問工人是一個Servlet(即延伸HttpServlet)?如果沒有,有人可以給我一個「工人」的例子嗎?
  2. 如果我只是想提交異步響應以便立即執行,那麼使用任務隊列真的有意義嗎?看來GWT的內置RPC機制已經足夠了。

回答

6

是的,worker會是一個servlet,它可以通過POST參數處理請求。 如果你想從客戶端的角度進行異步調用,那麼RPC就足夠了(從服務器的角度來看,它仍然是同步的)。如果您想執行不與您的客戶端通話的「延遲」作業,則可以使用任務隊列。

+0

很好,謝謝。關於任務的好處。而不是嘗試創建一個線程(這在App Engine中是不可能的),這是異步運行任務的好方法。 – Nick

0

Deferred.Deferable

Any plans for deferred.defer in Java?

import static com.google.appengine.api.labs.taskqueue.TaskOptions.Builder.taskName; 

import java.io.IOException; 

import javax.servlet.ServletException; 

import com.newatlanta.appengine.taskqueue.Deferred; 
import com.newatlanta.appengine.taskqueue.Deferred.Deferrable; 

@SuppressWarnings("serial") 
public class SampleTask implements Deferrable { 

    private String arg1; 
    private String arg2; 

    public SampleTask() { 
    } 

    public SampleTask(String arg1, String arg2) { 
     // save information to use later 
     this.arg1 = arg1; 
     this.arg2 = arg2; 
    } 

    @Override 
    public void doTask() throws ServletException, IOException { 
     // TODO do work here 

     // this is how you 'schedule' a task 
     // doing this here is recursive; 
     // you most likely want to call this from 
     // a server rpc endpoint 
     SampleTask task = new SampleTask("arg1", "arg2"); 
     Deferred.defer(task, "queue-name", taskName("task-name")); 
    } 
} 
相關問題