2009-11-18 158 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")); 
    } 
} 
相关问题