日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

appengine_Google AppEngine:任务队列API

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的appengine_Google AppEngine:任务队列API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。