Google AppEngine:任务队列API

任务队列

com.google.appengine.api.taskqueue

使用任务队列,用户可以发起一个请求,以使应用程序执行此请求之外的工作。 它们是进行后台工作的强大工具。
此外,您可以将工作组织成小的离散单元(任务)。 然后,应用程序根据队列的配置将这些任务插入一个或多个队列,并以FIFO顺序进行处理。 这是我从Google IO演示中获得的图表,该图表从较高级别说明了将任务插入队列中的情况:

队列配置

1.推送队列(默认):

推送队列将根据队列定义中配置的处理速率来处理任务(请参见下文)。 App Engine自动管理这些队列的生存期(创建,删除等),并调整处理能力以匹配您的配置和处理量。 这些只能在App Engine(您的应用内部)中使用。

2.拉入队列:

允许任务使用者在特定时间范围内的特定时间租用任务。 可通过Task Queue REST API在内部和外部对其进行访问。 但是,在这种情况下,GAE不会自动管理队列的生命周期和处理速率,这要由开发人员来决定。 后端也可以访问这些队列。

任务
 

它们代表应用程序执行的工作单元。 问是幂等的,即它们在队列中是唯一的,根据Google文档,不能同时调用多次(除非发生一些奇怪的内部错误情况)。
TaskOptions类的实例,任务由URL和有效载荷组成,有效载荷可以是简单的字符串,二进制对象(byte [])或DeferredTask的实例 DeferredTask本质上是可运行的 这使您可以将任务链接在一起。 我们的团队必须这样做,以便在GAE的最大执行限制为30秒时模拟长时间运行的任务。 当前,任务必须完成执行并在原始请求后的10分钟内发送200-299之间的HTTP响应值。 该期限与用户请求分开,后者的期限为60秒。
此外,要求使用令牌桶来控制任务执行的速率。 每次调用任务时,都会使用一个令牌。 这种租赁模型(获取令牌)通常是代理系统或消息传递系统的模型,它允许用户控制这些任务的执行速率(请参阅下文中的配置队列)。
最后,Task Queue API的一个非常重要的功能是它具有自动重试任务的功能。 创建TaskOptions对象时,可以使用RetriesOptions参数进行配置。

交易中的任务

任务可以作为数据存储事务的一部分入队。 如果事务成功提交,将确保插入(不执行)。 唯一需要注意的是,事务性任务不能具有用户定义的名称,并且在单个事务中最多有5个插入到任务队列中。

组态
 

队列是通过queue.xml配置的。 如果省略,则使用具有默认配置的默认队列。 由于请求队列满足更高级的需求,因此必须对其进行专门配置(没有默认的请求队列)。
应用程序的队列配置适用于该应用程序的所有版本。 您可以使用queue.xml中的target参数为推送队列覆盖此行为。 如果您想要具有不同队列处理配置的不同版本的应用程序(不同的站点),则使用此方法。

这是允许您配置的一些内容(文档更详尽):

bucket-size :当队列中有许多任务且速率很高时(仅推送),处理队列的速度。 (警告:开发服务器将忽略此值)

max-concurrent-requests :在指定队列中的任何给定时间可以执行的最大任务数(仅推送)。

模式 :是推还是拉。

名称 :队列名称

rate :在此队列上处理任务的频率 (s =秒,m =分钟,h =小时,d =天)。 如果为0,则认为队列已暂停。 (警告:开发服务器将忽略此值)

目标 :将任务定位到特定的后端或应用程序版本。

<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>

样例代码
 

这是一个非常简单的例子。 如前所述,任务队列基本上是一个URL处理程序。 在此Servlet中,GET将处理入队任务。 该任务将POST到相同的servlet,并执行执行任务的doPost()方法。 在这种情况下,它只是一个简单的计数器。 请注意,计数器是一个易失性属性。 如果您将此Servlet作为GET请求访问,它将排队另一个任务。 因此,您将看到两个任务都将计数器增加。
public class TaskQInfo extends HttpServlet {private static volatile int TASK_COUNTER = 0;// Executed by user menu clickpublic void doGet(HttpServletRequest req, HttpServletResponse resp)throws IOException {// Build a task using the TaskOptions Builder pattern from ** aboveQueue 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@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// This is the body of the taskfor(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打印5列五颗星_55组“数学顺口溜” 大九九乘法口诀表!孩子想学好数学必须背熟...

小学数学需要记住的知识点还是比较多的&#xff0c;看到这些知识点&#xff0c;很多孩子都觉得枯燥&#xff0c;不愿意用心去记。今天&#xff0c;我们给孩子们汇总了55组“数学顺口溜”和大九九乘法口诀&#xff0c;让孩子们在轻松有趣的氛围中学到知识&#xff01;55组“顺口…

C++学习48 对ASCII文件的读写操作

如果文件的每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件(或称字符文件)。程序可以从ASCII文件中读入若干个字符,也可以向它输出一些字符。 对ASCII文件的读写操作可以用以下两种方法&#xff1a;1) 用流插入运算符“<<”和流提取…

文献综述写作之“结构内容”

综述&#xff1a; 又称文献综述&#xff0c;英文名为review。它是利用已发表的文献资料为原始素材撰写的&#xff0c;通过对已发表材料的组织、综合和评价&#xff0c;以及对当前研究进展的考察来澄清问题。在某种意义上&#xff0c;综述论文具有一定的指导性&#xff0c;包括以…

NetBeans 7.2 beta:更快,更有用

NetBeans 7.2的beta版本引起了极大的兴奋。 在本文中&#xff0c;我将简要介绍一下此版本令人兴奋的原因&#xff08;包括更好的性能&#xff0c;提供更多的提示以及集成FindBugs&#xff09;。 NetBeans 7.2 beta在典型的下载捆绑软件中可用&#xff0c;从较小的Java SE&#…

地铁闸门会夹伤人吗_家长们注意啦!又有孩子被地铁闸机夹翻

原标题&#xff1a;家长们注意啦&#xff01;又有孩子被地铁闸机夹翻现代快报讯(通讯员狄公宣记者顾元森)家长带着孩子通过地铁站闸机&#xff0c;这件事情看似简单&#xff0c;却隐藏着风险。近日&#xff0c;南京地铁又发生了一起儿童被闸机夹翻的事&#xff0c;所幸孩子并无…

WPF DevExpress 设置雷达图Radar样式

DevExpress中定义的ChartControl很不错&#xff0c;很多项目直接使用这种控件。 本节讲述雷达图的样式设置 <Grid><Grid.Resources><DataTemplate x:Key"LabelItemDataTemplate" DataType"dxc:SeriesLabelItem"><Border CornerRadius…

mxnet系列教程之1-第一个例子

第一个例子当然是mnist的例子 假设已经成功安装了mxnet 例子的代码如下&#xff1a; cd mxnet/example/image-classification python train_mnist.py这样就会运行下去 train_mnist.py的代码为 """ Train mnist, see more explanation at http://mxnet.io/tutori…

Apache Shiro第3部分–密码学

除了保护网页和管理访问权限外&#xff0c; Apache Shiro还执行基本的加密任务。 该框架能够&#xff1a; 加密和解密数据&#xff0c; 哈希数据&#xff0c; 生成随机数。 Shiro没有实现任何加密算法。 所有计算都委托给Java密码学扩展&#xff08;JCE&#xff09;API。 使…

mysql数据存在就更新_Mysql:如果数据存在则更新,不存在则插入

mysql语法支持如果数据存在则更新&#xff0c;不存在则插入&#xff0c;首先判断数据存在还是不存在的那个字段要设置成unique索引&#xff0c;例如表tb_addrbook如下&#xff1a;索引&#xff1a;语句1:不存在插入INSERT INTO tb_addrbook(num,name,mobile) VALUE(1001,小李,1…

Memcached, Redis, MongoDB区别

mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数据库&#xff0c;其优势在于查询功能比较强大&#xff0c;能存储海量数据。mongodb和memcached不存在谁替换谁的问题。和memcached更为接近的是redis。它们都是内存型数据库&#xff0c;数据保存在内存中&…

洛谷P1757 通天之分组背包 [2017年4月计划 动态规划06]

P1757 通天之分组背包 题目背景 直达通天路小A历险记第二篇 题目描述 自01背包问世之后&#xff0c;小A对此深感兴趣。一天&#xff0c;小A去远游&#xff0c;却发现他的背包不同于01背包&#xff0c;他的物品大致可分为k组&#xff0c;每组中的物品相互冲突&#xff0c;现在&a…

c3p0 0.9.1.2 配套mysql_连接数据库,使用c3p0技术连接MySQL数据库

读取配置文件连接MySQL数据库先确认已经导入了 mysql 的驱动包db.propertiesdrivercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/v20?useUnicodetrue&characterEncodingutf8usernamerootpassword123456JdbcUtil.javapackage com.stu_mvc.utils;import java.io.Fi…

【Hadoop】Hadoop MR 自定义分组 Partition机制

1、概念 2、Hadoop默认分组机制--所有的Key分到一个组&#xff0c;一个Reduce任务处理 3、代码示例 FlowBean package com.ares.hadoop.mr.flowgroup;import java.io.DataInput; import java.io.DataOutput; import java.io.IOException;import org.apache.hadoop.io.WritableC…

Spring Framework 3.2 M1发布

SpringSource刚刚宣布了针对Spring 3.2的第一个里程碑版本。 现在可以从SpringSource存储库&#xff08;位于http://repo.springsource.org/&#xff09;获得新版本。 查看有关通过Maven 解决这些工件的快速教程 。 此版本包括&#xff1a; 最初支持异步Controller方法 早期…

两种动态SQL

参考&#xff1a;http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.htmlhttp://www.cnblogs.com/xbf321/archive/2008/11/02/1325067.html 两种动态SQL  1. EXEC (sql)   2. EXEC sp_executesql 性能&#xff1a;sp_executesql提供了输入输出接口&#xff0c;更…

mysql查询含有某个值的表_MYSQL查询数据表中某个字段包含某个数值

当某个字段中字符串是"1,2,3,4,5,6"或者"123456" 查询数据表中某个字段是否包含某个值 1:模糊查询 使用like select * from 表 where 字段 like %1%; 2:函数查找 find_in_set(str,数组) select * from 表 where find_in_set(1,字段); 注意:mysql字符串…

android学习笔记35——AnimationDrawable资源

AnimationDrawable资源 AnimationDrawable&#xff0c;代表一个动画。 android既支持传统的逐帧动画(类似于电影方式&#xff0c;一张图片一张图片的切换)&#xff0c;也支持通过平移、变换计算出来的补间动画、属性动画。 下面以补间动画为例&#xff0c;介绍如何定义Animatio…

RESTEasy教程第2部分:Spring集成

RESTEasy提供了对Spring集成的支持&#xff0c;这使我们能够将Spring bean作为RESTful WebServices公开。 步骤&#xff03;1&#xff1a;使用Maven配置RESTEasy Spring依赖项。 <project xmlnshttp:maven.apache.orgPOM4.0.0 xmlns:xsihttp:www.w3.org2001XMLSchema-insta…

java RSA 加签验签【转】

引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/ java RSA 加签验签 package com.testdemo.core.service.impl.alipay;import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.PK…

mysql启动时执行sql server_常见 mysql 启动、运行.sql 文件错误处理

1、mysql 启动错误处理查看 log&#xff1a;Mac: /usr/local/var/mysql/lizhendeMacBook-Pro.local.err根据 log 针对性的进行调整&#xff0c;包治百病2、Mysql Incorrect datetime value问题描述&#xff1a;低版本的 mysql 中&#xff0c;数据库转储 sql 文件。导入到高版本…