{"id":1193,"date":"2012-05-30T01:00:00","date_gmt":"2012-05-30T01:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/google-appengine-task-queues-api.html"},"modified":"2012-10-22T05:00:20","modified_gmt":"2012-10-22T05:00:20","slug":"google-appengine-task-queues-api","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html","title":{"rendered":"Google AppEngine: Task Queues API"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\"><strong>Task Queues <\/strong><\/p>\n<p><code>com.google.appengine.api.taskqueue<\/code><\/p>\n<div style=\"text-align: justify\">With Task Queues a user can initiate a request to have applications perform work outside of this request;  they are a powerful tool for background work.   <\/div>\n<div style=\"text-align: justify\">Furthermore, you can organize work into small, discrete units (tasks). The application then inserts these tasks into one or more queues based on the queue&#8217;s configuration and processes them in FIFO order. Here&#8217;s a diagram I took from a Google IO presentation which illustrates at a high level task insertion into the queue: <\/div>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/3.bp.blogspot.com\/-QROiCyrcqKk\/T8R3rMPP7PI\/AAAAAAAAAUI\/fIEOJAc7K1I\/s1600\/taskq.png\"><img decoding=\"async\" border=\"0\" height=\"298\" src=\"http:\/\/3.bp.blogspot.com\/-QROiCyrcqKk\/T8R3rMPP7PI\/AAAAAAAAAUI\/fIEOJAc7K1I\/s400\/taskq.png\" width=\"400\" \/><\/a><\/div>\n<p><strong>Queue Configuration<\/strong>                   <\/p>\n<p>1.                     Push Queues (default):                    <\/p>\n<blockquote class=\"tr_bq\">\n<p>Push queue will process tasks based on the processing rate configured in the queue definition (see below). App Engine automatically manages the lifetime of these queues (creation, deletion, etc) and adjusts the processing capacity to match your configuration and processing volume. These can only be used within App Engine (internal to your app). <\/p>\n<\/blockquote>\n<p>&nbsp;2. Pull Queues:<\/p>\n<blockquote class=\"tr_bq\">\n<p>Allow a task consumer to lease tasks at a specific time within a specific timeframe. They are accessible internally as well as externally through the Task Queue REST API. In this scenarion, however, GAE does not manage the lifecycle and processing rate of queues automatically, it is up to the developer to do it. A <i>backend<\/i> also has access to these queues.                                         <\/p>\n<\/blockquote>\n<p><strong>Tasks<\/strong><br \/>\n<strong>&nbsp;<\/strong>                   <\/p>\n<div style=\"text-align: justify\">They represent a unit of work performed by application. T                    asks are                     are idempotent, i.e they are unique in a queue and according to Google documentation cannot be invoked more than once simultaneously (unless some weird internal error condition happens).                     <\/div>\n<div style=\"text-align: justify\">Instances of <i>TaskOptions<\/i> class, tasks                     consist of URL and a payload which can be a simple string, a binary object (byte[ ]), or an instance of a <i>DeferredTask. <\/i>A <i>DeferredTask <\/i>is basically a <i>Runnable. <\/i>This allows you to chain tasks together. Our team had to do this in order to simulate long runnings tasks when GAE&#8217;s max execution limit was 30 seconds. Presently, a task                     must finish executing and send an HTTP response value between 200\u2013299 within 10 minutes of the original request. This deadline is separate from user requests, which have a 60-second deadline.<\/div>\n<div style=\"text-align: justify\">Furthermore, t                     asks use token buckets to control the rate of task execution. Each time task is i                     nvoked, a token is used. This leasing model (acquire a token) is typically of brokering systems or message-passing systems and it allows users to control the rate of execution of these tasks                       (see below on configuring queues).                     <\/div>\n<div style=\"text-align: justify\">Lastly, a very important feature of the Task Queue API is that it has automatic retries of tasks.                     You can configure this with the <i>RetriesOptions<\/i> parameter when creating the<i> TaskOptions<\/i> object.                                         <\/div>\n<p><strong>Task within a Transaction<\/strong>                   <div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>Tasks can be                     enqueued as part of a datastore transaction. Insertion (not execution) will be                     guaranteed if                     the transaction was committed successfully. The only caveat is that                     Transactional tasks cannot have user-defined names and there is a maximum of 5                     insertions into task queues in a single transaction.                    <\/p>\n<p><strong>Configuration<\/strong><br \/>\n<strong>&nbsp;<\/strong>                   <\/p>\n<div style=\"text-align: justify\">Queues are configured via queue.xml.                     If omitted, default queue with default configuration is used. Since Pull Queues are for more advanced needs, they                     must be specifically configured (there is no default pull queue).                     <\/div>\n<div style=\"text-align: justify\">An application&#8217;s, queue configuration applies to all versions of the app. You can override this behavior for push queues using the target parameter in queue.xml. This is used in case you want different versions of your app (different sites) with different queue processing configuration.                    <\/div>\n<p>Here are some of things you are allowed to configure (the documentation is more extensive):<\/p>\n<p>\u2022 <strong>bucket-size<\/strong>: how fast the queue is processed when many tasks are in the queue and the                      rate is high (push only). (Warning: Development server ignores this value)<\/p>\n<p>\u2022 <strong>max-concurrent-requests<\/strong>: maximum number of tasks that can be executed at any \\ given                      time in the specified queue (push only).<\/p>\n<p>\u2022 <strong>mode<\/strong>: whether it\u2019s push or pull.<\/p>\n<p>\u2022 <strong>name<\/strong>: queue name<\/p>\n<div style=\"text-align: justify\">\u2022 <strong>rate<\/strong>: How often tasks are processed on this queue (s=seconds, m=minutes, h=hours, d=days). If 0, queue is considered paused. (Warning: Development server ignores this value)<\/div>\n<p>\u2022 <strong>target<\/strong>: target a task to a specfic <i>backend<\/i> or application version.                                         <\/p>\n<pre class=\"brush:xml\">&lt;queue-entries&gt; \r\n&lt;!--Set the number of max concurrent requests to 10--&gt;   \r\n  &lt;queue&gt;     \r\n     &lt;name&gt;optimize-queue&lt;\/name&gt;                 \r\n     &lt;rate&gt;20\/s&lt;\/rate&gt;   \r\n     &lt;bucket-size&gt;40&lt;\/bucket-size&gt;       \r\n     &lt;max-concurrent-requests&gt;10&lt;\/max-concurrent-requests&gt;     \r\n  &lt;\/queue&gt; \r\n&lt;\/queue-entries&gt; \r\n<\/pre>\n<p><strong>Sample Code<\/strong><br \/>\n<strong>&nbsp;<\/strong>                   <\/p>\n<div style=\"text-align: justify\">This is a very straightforward example. As I said before, task queues are basically a URL handler. In this servlet, the GET will handle enqueueing a task. The task will POST to this same servlet and execute the doPost( ) method carrying out the task. In this case, it&#8217;s just a simple counter. Notice the counter is a volatile property. If you access this servlet as GET request, it will enqueue another task. So, you will see the counter being incremented by both tasks.                     <\/div>\n<pre class=\"brush:java\">public class TaskQInfo extends HttpServlet {\r\n                     \r\n   private static volatile int TASK_COUNTER = 0;\r\n                     \r\n\r\n   \/\/ Executed by user menu click\r\n   public void doGet(HttpServletRequest req, HttpServletResponse resp)\r\n        throws IOException {\r\n                      \r\n        \/\/ Build a task using the TaskOptions Builder pattern from ** above\r\n        Queue queue = QueueFactory.getDefaultQueue();\r\n        queue.add(withUrl(\"\/taskq_demo\").method(TaskOptions.Method.POST)); \r\n                     \r\n        resp.getWriter().println(\"Task have been added to default queue...\");\r\n                     \r\n        resp.getWriter().println(\"Refresh this page to add another count task\");\r\n   }\r\n                     \r\n   \/\/ Executed by TaskQueue\r\n   @Override\r\n   protected void doPost(HttpServletRequest req, HttpServletResponse resp)\r\n       throws ServletException, IOException {\r\n                     \r\n       \/\/ This is the body of the task\r\n       for(int i = 0; i &lt; 1000; i++) {\r\n             log.info(\"Processing: \" + req.getHeader(\"X-AppEngine-TaskName\") + \"-\" +           \r\n                     TASK_COUNTER++); \r\n                     \r\n             try { \r\n                \/\/ Sleep for a second (if the rate is set to 1\/s this will allow at \r\n                \/\/ most 1 more task to be processed)\r\n                     \r\n                Thread.sleep(1000); \r\n             } catch (InterruptedException e) { \/\/ ignore}\r\n       }\r\n   }\r\n}\r\n<\/pre>\n<p>Task queues allow you to achieve some level of concurrency in your application by invoking background processes on demand. For very lengthy tasks, you might want to take a look at App Engine <i>backends, <\/i>which are basically special App Engine instances with no request time limit.                     <\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/www.reflectivethought.net\/2012\/03\/google-appengine-task-queues-api.html\">Google AppEngine: Task Queues API  <\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Luis Atencio at the <a href=\"http:\/\/www.reflectivethought.net\/\">Reflective Thought<\/a> blog.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Task Queues com.google.appengine.api.taskqueue With Task Queues a user can initiate a request to have applications perform work outside of this request; they are a powerful tool for background work. Furthermore, you can organize work into small, discrete units (tasks). The application then inserts these tasks into one or more queues based on the queue&#8217;s configuration &hellip;<\/p>\n","protected":false},"author":10,"featured_media":120,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[179],"class_list":["post-1193","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-google-app-engine"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Google AppEngine: Task Queues API - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Task Queues com.google.appengine.api.taskqueue With Task Queues a user can initiate a request to have applications perform work outside of this request;\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google AppEngine: Task Queues API - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Task Queues com.google.appengine.api.taskqueue With Task Queues a user can initiate a request to have applications perform work outside of this request;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:author\" content=\"http:\/\/www.facebook.com\/luis.j.atencio\" \/>\n<meta property=\"article:published_time\" content=\"2012-05-30T01:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-22T05:00:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/google-app-engine-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Luis Atencio\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/luijar\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Luis Atencio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html\"},\"author\":{\"name\":\"Luis Atencio\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/c3558c9908122f9620e7f2c852124de7\"},\"headline\":\"Google AppEngine: Task Queues API\",\"datePublished\":\"2012-05-30T01:00:00+00:00\",\"dateModified\":\"2012-10-22T05:00:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html\"},\"wordCount\":825,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/google-app-engine-logo.jpg\",\"keywords\":[\"Google App Engine\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html\",\"name\":\"Google AppEngine: Task Queues API - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/google-app-engine-logo.jpg\",\"datePublished\":\"2012-05-30T01:00:00+00:00\",\"dateModified\":\"2012-10-22T05:00:20+00:00\",\"description\":\"Task Queues com.google.appengine.api.taskqueue With Task Queues a user can initiate a request to have applications perform work outside of this request;\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/google-app-engine-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/google-app-engine-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/05\\\/google-appengine-task-queues-api.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Google AppEngine: Task Queues API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/c3558c9908122f9620e7f2c852124de7\",\"name\":\"Luis Atencio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a8f7d5a598580d9620f31dc14531cf9adef58f35680ec9ec6c7fe086bd6bd1f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a8f7d5a598580d9620f31dc14531cf9adef58f35680ec9ec6c7fe086bd6bd1f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0a8f7d5a598580d9620f31dc14531cf9adef58f35680ec9ec6c7fe086bd6bd1f?s=96&d=mm&r=g\",\"caption\":\"Luis Atencio\"},\"sameAs\":[\"http:\\\/\\\/www.reflectivethought.net\\\/\",\"http:\\\/\\\/www.facebook.com\\\/luis.j.atencio\",\"http:\\\/\\\/www.linkedin.com\\\/in\\\/luijar\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/luijar\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Luis-Atencio\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Google AppEngine: Task Queues API - Java Code Geeks","description":"Task Queues com.google.appengine.api.taskqueue With Task Queues a user can initiate a request to have applications perform work outside of this request;","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html","og_locale":"en_US","og_type":"article","og_title":"Google AppEngine: Task Queues API - Java Code Geeks","og_description":"Task Queues com.google.appengine.api.taskqueue With Task Queues a user can initiate a request to have applications perform work outside of this request;","og_url":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_author":"http:\/\/www.facebook.com\/luis.j.atencio","article_published_time":"2012-05-30T01:00:00+00:00","article_modified_time":"2012-10-22T05:00:20+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/google-app-engine-logo.jpg","type":"image\/jpeg"}],"author":"Luis Atencio","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/luijar","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Luis Atencio","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html"},"author":{"name":"Luis Atencio","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/c3558c9908122f9620e7f2c852124de7"},"headline":"Google AppEngine: Task Queues API","datePublished":"2012-05-30T01:00:00+00:00","dateModified":"2012-10-22T05:00:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html"},"wordCount":825,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/google-app-engine-logo.jpg","keywords":["Google App Engine"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html","url":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html","name":"Google AppEngine: Task Queues API - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/google-app-engine-logo.jpg","datePublished":"2012-05-30T01:00:00+00:00","dateModified":"2012-10-22T05:00:20+00:00","description":"Task Queues com.google.appengine.api.taskqueue With Task Queues a user can initiate a request to have applications perform work outside of this request;","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/google-app-engine-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/google-app-engine-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/05\/google-appengine-task-queues-api.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Google AppEngine: Task Queues API"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/c3558c9908122f9620e7f2c852124de7","name":"Luis Atencio","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/0a8f7d5a598580d9620f31dc14531cf9adef58f35680ec9ec6c7fe086bd6bd1f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0a8f7d5a598580d9620f31dc14531cf9adef58f35680ec9ec6c7fe086bd6bd1f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0a8f7d5a598580d9620f31dc14531cf9adef58f35680ec9ec6c7fe086bd6bd1f?s=96&d=mm&r=g","caption":"Luis Atencio"},"sameAs":["http:\/\/www.reflectivethought.net\/","http:\/\/www.facebook.com\/luis.j.atencio","http:\/\/www.linkedin.com\/in\/luijar","https:\/\/x.com\/http:\/\/twitter.com\/luijar"],"url":"https:\/\/www.javacodegeeks.com\/author\/Luis-Atencio"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1193"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1193\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/120"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}