2

我的任務超過了任務隊列超過10分鐘的最後期限。通過不同的文檔,我發現使用模塊我可以運行一個實例來處理長時間運行的任務,但最好甚至應該使用任務隊列來完成。我曾經使用後端,但它們已被棄用。如何在Google App Engine中使用模塊並使用任務隊列(Java)向其添加目標?

我的問題是如何將模塊引入到我現有的App Engine項目中,以及如何使用它們來運行長時間運行的任務?

以下是一段代碼:

Queue queue = QueueFactory.getQueue("myqueue"); 
TaskOptions task = TaskOptions.Builder.withUrl("/submitworker").method(Method.POST); 
queue.add(task); 

我有什麼變化,上面的代碼,以增加使用一個模塊一個長時間運行的任務? [在「submitworker」是一個servlet這是實際的長期運行的任務]

我曾提到this鏈接,但我無法與第三步得到解決:
3.添加服務聲明元素的AppEngine上-application.xml文件。

此外,即使我成功地將模塊添加到我的項目中,如何使用任務隊列定位此模塊?

我已經通過this的問題,但它是一個python實現,我的實現是在Java中。

我正在尋找一個如何在模塊中使用「目標」以及如何在添加到任務隊列時使用它的分步過程。

即使我將長時間運行的模塊目標添加到任務隊列,仍然會在10分鐘後終止執行,或者即使任務隊列中的任務過期,它是否會完成任務?

請建議。

回答

0

模塊和服務是一樣的東西,他們類似於舊的後端(仍然有效,但不推薦使用)。

有越來越模塊的兩種基本方式工作:

  • 創建EAR和部署
  • 部署服務作爲獨立WAR文件(這可能是你現在正在做的事情爲默認模塊)

第二個選項可能更容易,因爲它只是更改application-web.xml的問題。您可以爲每個模塊提供一個回購或分支,或者只是一個構建過程,以更改您的目標模塊。

現在您的應用程序的web.xml可能有這樣的事情:

<application>@[email protected]</application> 
<version>@[email protected]</version>  
<module>default</module> 

將其更改爲這樣的事情

<application>@[email protected]</application> 
<version>@[email protected]</version>  
<module>long-running-service</module> 
<instance-class>B1</instance-class> 
<manual-scaling> 
    <instances>1</instances> 
</manual-scaling> 

您配置隊列本身的目標在queue.xml的特定模塊見here

+0

謝謝......!我遵循了指南併成功地在應用引擎中創建了一項新服務。在queue.xml中也添加了,但是有什麼辦法可以知道這個任務真的是在後臺執行的,我有一個代碼顯示了有關任務的不斷更新,但是更新值沒有在前端,可能是什麼問題?另外,10分鐘後,任務消失,即使它從任務隊列中消失,任務仍在後端實例上執行嗎? –

+0

您可以在雲控制檯中查看任務的重試狀態,並且如果您想記錄該請求,則可以在請求中以標題的形式訪問重試計數。您可以在雲日誌查看器中查看按服務細分的日誌,以查看發生的情況。任務不應該消失,除非它成功或超過了重試次數。另外,當問題解決時,不要忘記接受最好的答案 - 它可以幫助每個人。 – Nick

+0

謝謝@尼克!答案幫助我瞭解了應用程序引擎中的服務和模塊,並使我的概念清晰明瞭。 –

0

免責聲明:答案完全基於文檔(我實際上使用Python - 相同的概念,但不同的配置)。

要使服務/模塊允許長時間運行的任務,您必須對其進行配置以進行基本或手動縮放。從Scaling types and instance classes(在表中的Deadline行):

    Manual scaling

請求可以無限期地運行。手動縮放的實例可以選擇 來處理/ _ah /啓動並執行程序或腳本很多小時 而不返回HTTP響應代碼。任務可以運行長達24小時。

  • Basic scaling柱:

同手動縮放。

模塊縮放CONFIGS,經由相應的模塊的appengine-web.xml文件來完成,在Scaling elements描述:

  • <manual-scaling>

可選。該元素可以爲 模塊啓用手動縮放,並設置模塊的實例數量。

  • <basic-scaling>

可選。該元素設置模塊的實例數 。

至於實際轉換到模塊,補充你指出與Configuration Files(包括an example)導向件和appengine-web.xml Syntax(見moduleservice CONFIGS)。

關於appengine-application.xml,從Configuration Files

的META-INF目錄下有兩個配置文件: appengine-application.xmlapplication.xml。該 appengine-application.xml文件包含在你的應用程序部署使用 App Engine的工具一般資料...

...

注意的是,雖然每一個appengine-web.xml文件必須包含 <application>標籤中,您提供的名稱將被忽略。 的名稱取自appengine-application.xml文件中的<application>標記。

要將某個隊列指向某個服務/模塊,請使用queue.xml文件。從Syntax

  • <target>(推送隊列):

可選。指定模塊/版本,前端版本或後端的字符串,在該端點上執行排隊到此隊列中的所有任務。

構建一個任務的HTTP請求時,該字符串被預置爲您的應用的域名。例如,如果您的應用ID爲 爲my-app並且您將目標設置爲my-version。我的服務, URL主機名將被設置爲 my-version.my-service.my-app.appspot.com

如果未指定目標,則在它們入隊的應用程序的相同版本 上調用任務。因此,如果您在默認應用程序版本中入隊了 任務,而未在隊列上指定目標 ,則會在默認應用程序版本中調用該任務。 請注意,如果默認應用程序版本在任務排入隊列的時間 與其執行時間之間發生變化,則任務 將以新的默認版本運行。

如果您使用的模塊與dispatch file一起使用,則您的任務的 HTTP請求可能會被攔截並重新路由到另一個模塊。

相關問題