appengine_Google AppEngine:任务队列API

appengine

任务队列

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秒。
此外,t要求使用令牌桶来控制任务执行的速率。 每次调用任务时,都会使用一个令牌。 这种租赁模型(获取令牌)通常是代理系统或消息传递系统的模型,它允许用户控制这些任务的执行速率(请参阅下文中的配置队列)。
最后,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

appengine

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

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

相关文章

Android studio Error occurred during initialization of VM 问题解决

最近开发导入其他Android项目遇见的问题,如下图&#xff1a; 解决办法&#xff1a; 将org.gradle.jvmargs的值该为521&#xff08;堆内存分配过高导致&#xff09; 备忘&#xff0c;希望能帮助到大家转载于:https://www.cnblogs.com/yunfang/p/6857096.html

滑动窗口限流 java_Spring Boot 的接口限流算法优缺点深度分析

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达上一篇&#xff1a;这300G的Java资料是我师傅当年给我的&#xff0c;免费分享给大家(已修复)下一篇&#xff1a;昨天分享资料不小心把百度网盘深处的秘密泄露了(已修复)转自: loubobooo原文&am…

mips j指令_MIPS的基本实现

MIPS核心指令集&#xff1a;指令集概括为3个指令类&#xff1a;存储器访问指令类lw&#xff0c;sw等2. 算术逻辑指令类add&#xff0c;sub等3. 转移指令类beg&#xff0c;J等指令的共同性取指令&#xff0c;送PC值给Memory&#xff1b;根据指令内容读取寄存器内容&#xff1b;除…

腾讯管家去除桌面快捷小图标

找了大半天&#xff0c;原来腾讯管家也可以&#xff1a; 废话不多说&#xff0c;动手实践吧。。。。。 打开电脑管家——电脑诊所——桌面图标——【去掉快捷方式小箭头】 就这样轻松的实现了&#xff0c;赶快试试吧&#xff01; 转载于:https://www.cnblogs.com/yjq520/p/6858…

argparse模块_Argparse:一个具体案例教会你python命令行参数解析

问题描述&#xff1a;现有一个用于数据格式转换的py脚本(多转一)&#xff0c;执行时通过命令行传入一系列的参数控制其具体运行方式&#xff0c;使满足以下要求&#xff1a;1. 必须传入需要处理的原始数据文件名2. 可以指定输入文件的格式&#xff0c;若没有指定则使用默认值&a…

Eclipse中src/main/resources配置文件启动问题

项目pom文件有做修改如下的时候&#xff0c;还没有进行mvn clean install 启动test项目中的appcontext会 可以手动清空 然后就可以了。 出现如下问题的原因是 配置文件默认输出到target/classes 下 项目启动默认也会找该目录下的配置文件 其实这里pom文件拷贝配置文件只是用于读…

仍然不安全:变成了Java 9功能的Java 6中的主要错误

sun.misc.Unsafe的未来将如何发展&#xff1f; 随着2015年即将结束&#xff0c;我们认为这将是对Java社区过去一年中最热门辩论之一进行尸检的好机会。 通过查看标题&#xff0c;您中的大多数人可能已经开始在口腔中产生酸味并在肠道中产生愤怒的感觉&#xff0c;但是如果您错…

camvid数据集使用方法_使用PyTorch处理CIFAR10数据集并显示

在训练图像分类的时候&#xff0c;我们通常会使用CIFAR10数据集&#xff0c;今天就先写一下如何展示数据集的图片及预处理。第一部分代码&#xff0c;展示原始图像&#xff1a;import numpy as npimport torch#导入内置cifarfrom torchvision.datasets import cifar#预处理模块…

rhel 8.2不识别unicode_基于tensorflow 实现端到端的OCR:二代身份证号识别

最近在研究OCR识别相关的东西&#xff0c;最终目标是能识别身份证上的所有中文汉字数字&#xff0c;不过本文先设定一个小目标&#xff0c;先识别定长为18的身份证号&#xff0c;当然本文的思路也是可以复用来识别定长的验证码识别的。本文实现思路主要来源于Xlvector的博客&am…

Lua和C++交互详细总结

转载自&#xff1a;http://www.cnblogs.com/sevenyuan/p/4511808.html 一、Lua堆栈 要理解Lua和C交互&#xff0c;首先要理解Lua堆栈。 简单来说&#xff0c;Lua和C/C语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。 在Lua中&#xff0c;Lua堆栈就是一个struc…

adf开发_ADF BC:创建绑定到业务组件的UI表

adf开发在此示例中&#xff0c;我们将展示如何创建绑定到业务组件的简单UI表&#xff08;af&#xff1a;table&#xff09;。 我再次尝试使用简单的标准在网上进行搜索&#xff1a; “如何创建绑定到业务组件ADF 11g的af&#xff1a;table” 我必须承认我没有得到我想要的答案…

java游戏热血江湖,热血江湖源码_附安装教程

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;源码里面可能有联系方式之类的不要相信&#xff0c;反正我在这里已经说过了&#xff0c;你们上当就不管我的事了还有&#xff0c;源码里面的联系方式跟我没关系!教程来了认真看&#xff01;&#xff01;&#xff0…

在没有适当上下文的情况下引发异常是一种不良习惯

Allison Anders等人的《四个房间》&#xff08;1995&#xff09;。 我不断重复同样的错误。 因此&#xff0c;该停止并制定规则以防止这种情况了。 错误不是致命的&#xff0c;但很烦人。 当查看生产日志时&#xff0c;经常会看到类似"File doesnt exist" &#xff…

内存压力测试软件_日常游戏,毫无压力,荣耀Magicbook 14锐龙版性能测试

上期蚂蚁给大家带来了荣耀Magicbook 14锐龙版的初见评测&#xff0c;本期将会带来性能的测试&#xff0c;究竟这台高性价比的电脑&#xff0c;能不能应付得了日常的游戏使用呢&#xff1f;蚂蚁这次使用的测试软件分别为&#xff1a;鲁大师、CPU-Z、Cinebench R15、CrystalDiskM…

c 解析java byte,深入解析Java编程中面向字节流的一些应用

文件输入输出流文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作。【例】通过程序创建一个文件&#xff0c;从键盘输入字符&#xff0c;当遇到字符“#”时结束&#xff0c;在屏幕上显示该文件的所有内容import java.io.*;class e…

cdatabase读取excel第一行数据_pandas读取excel数据并对重复数据进行标记或者删除

pandas读取excel数据并对重复数据进行标记或者删除​mp.weixin.qq.compandas通常在读取excel数据之后&#xff0c;如果需要进行去重&#xff0c;有两种方式&#xff0c;一种是进行标记&#xff0c;另一种是在pandas中直接去重如下图所示&#xff0c;excel数据&#xff1a;&…

java 7.函数-递归_带有谓词的Java中的函数样式-第2部分

java 7.函数-递归在本文的第一部分中&#xff0c;我们介绍了谓词&#xff0c;这些谓词通过具有返回true或false的单一方法的简单接口&#xff0c;为Java等面向对象的语言带来了函数式编程的某些好处。 在第二部分和最后一部分中&#xff0c;我们将介绍一些更高级的概念&#xf…

apk改之理_一份礼物.apk-O泡果奶的逆向分析

事情起因是震惊全国大学生的1013事件&#xff01;&#xff01;&#xff01;刚好看到社团群里在讨论这个&#xff0c;于是就发挥专业特长分析一下拿到apk ,第一步肯定先放到虚拟机里跑一下看下效果emmm这似曾相识的页面,这熟悉的音量,唯一变化的就是音乐变成了O泡果奶的魔性洗脑…

python彩色螺旋线_解决python彩色螺旋线绘制引发的问题

彩色螺旋线的绘制代码如下&#xff1a; import turtle import time turtle.pensize(2) turtle.bgcolor(black) colors [red, yellow, purple, blue] turtle.tracer(False) for x in range(400): turtle.forward(2*x) turtle.color(colors[x % 4]) turtle.left(91) turtle.trac…

ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

&#xff08;2017-05-18 银河统计&#xff09;决策树(Decision Tree&#xff09;是在已知各种情况发生概率的基础上&#xff0c;通过构成决策树来判断其可行性的决策分析方法&#xff0c;是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干&#xff0c…