appengine
com.google.appengine.api.taskqueue
队列配置
1.推送队列(默认):
推送队列将根据队列定义中配置的处理速率来处理任务(请参见下文)。 App Engine自动管理这些队列的生存期(创建,删除等),并调整处理能力以匹配您的配置和处理量。 这些只能在App Engine(您的应用内部)中使用。
2.拉队列:
允许任务使用者在特定时间范围内的特定时间租用任务。 可通过Task Queue REST API在内部和外部对其进行访问。 但是,在这种情况下,GAE不会自动管理队列的生命周期和处理速率,这要由开发人员来决定。 后端也可以访问这些队列。
任务
交易中的任务
任务可以作为数据存储事务的一部分入队。 如果事务成功提交,将保证插入(不执行)。 唯一需要注意的是,事务性任务不能具有用户定义的名称,并且在单个事务中最多有5个插入到任务队列中。
组态
这是允许您配置的一些内容(文档更详尽):
• bucket-size :当队列中有许多任务且速率很高时(仅推送),处理队列的速度。 (警告:开发服务器将忽略此值)
• max-concurrent-requests :在指定队列中的任何给定时间可以执行的最大任务数(仅推送)。
• 模式 :是推还是拉。
• 名称 :队列名称
• 目标 :将任务定位到特定的后端或应用程序版本。
<queue-entries>
<!--Set the number of max concurrent requests to 10-->
<queue>
<name>optimize-queue</name>
<rate>20/s</rate>
<bucket-size>40</bucket-size>
<max-concurrent-requests>10</max-concurrent-requests>
</queue>
</queue-entries>
样例代码
public class TaskQInfo extends HttpServlet {
private static volatile int TASK_COUNTER = 0;
// Executed by user menu click
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
// Build a task using the TaskOptions Builder pattern from ** above
Queue queue = QueueFactory.getDefaultQueue();
queue.add(withUrl("/taskq_demo").method(TaskOptions.Method.POST));
resp.getWriter().println("Task have been added to default queue...");
resp.getWriter().println("Refresh this page to add another count task");
}
// Executed by TaskQueue
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// This is the body of the task
for(int i = 0; i < 1000; i++) {
log.info("Processing: " + req.getHeader("X-AppEngine-TaskName") + "-" +
TASK_COUNTER++);
try {
// Sleep for a second (if the rate is set to 1/s this will allow at
// most 1 more task to be processed)
Thread.sleep(1000);
} catch (InterruptedException e) { // ignore}
}
}
}
任务队列使您可以通过按需调用后台进程来在应用程序中实现某种程度的并发。 对于非常冗长的任务,您可能需要查看App Engine 后端,这些后端基本上是没有请求时间限制的特殊App Engine实例。
参考: Google AppEngine:来自JCG合作伙伴 Luis Atencio的Task Queues API ,位于Reflective Thought博客上。
翻译自: https://www.javacodegeeks.com/2012/05/google-appengine-task-queues-api.html
appengine