2013-03-19 99 views
1

我使用異步URL獲取調用來訪問外部服務器的信息,同時進行其他處理。如果原始異步URL獲取調用失敗,並且沒有返回到原始(主)線程,因爲它忙於執行其他操作,我希望能夠重試該調用或將url更改爲備份url。這樣做的最好方法就是產生一個執行同步URL獲取的輔助線程(我猜這是爲了工作,因爲應用程序引擎不是多核心,我將不得不暫停/繼續在兩個線程之間切換)?還是等待主線程在重試url獲取操作之前完成它正在執行的所有任務?Async URL Fetch(如果失敗時重試,不會阻止)

謝謝!

回答

1

使用運行同步URLFetch的輔助線程可以在您的用例中正常工作。由於JVM和/或OS會爲您處理,因此擁有非多核CPU不會影響開發人員角度的線程操作。

一個小問題,因爲GAE是一個沙盒環境,所以您需要通過Google的API創建線程。如果您還沒有,可以在here中看到關於如何產生App Engine線程的簡短文檔。

請注意,衍生線程的壽命限於原始請求的壽命。 (例如,前端實例請求需要60秒)另一個好主意是在輔助線程上使用the request timer來定期檢查剩餘可用時間,然後再進行第二次URLFetch調用,以便您可以調整超時限制,或者在請求時優雅地終止請求剩下的時間還不夠多。

+0

如果請求花費很長時間,我可以只將第一個請求重定向到另一個請求,它會嘗試第二個url(這是否會重置60秒定時器?)還是使用支持的實例更好? – cowmix 2013-03-19 20:36:44

+0

@cowmix:重定向請求不會重置定時器,它會從您的應用收到請求的時間開始計數。如果請求時間超過60秒,請考慮將任務推送到[TaskQueue](https://developers.google.com/appengine/docs/java/taskqueue/overview),然後在TaskQueue的處理程序中完成處理。前端任務隊列有10分鐘截止日期。如果10分鐘仍然比您需要的時間少,您可以將TaskQueue中的任務指向後端實例,使其有24小時的最後期限。 – 2013-03-19 22:17:08

+0

但是任務隊列無法將響應傳遞給用戶權限?因此,我必須將任務隊列響應保存到數據存儲,並讓用戶客戶端持續輪詢數據存儲檢查值嗎? – cowmix 2013-03-19 22:26:53

相關問題