0

我使用jetty9-compat + java8配置並收到以下異常。也許正因爲如此,我無法在會話中存儲對象,所以最終我無法登錄到我的服務。在memcache中GAE靈活環境服務錯誤

[INFO] cze 28, 2016 11:17:56 AM com.google.apphosting.vmruntime.VmMetadataCache getMetadata 
[INFO] 
[INFO] INFO: Meta-data 'attributes/gae_affinity' path retrieval error: metadata 
[INFO] 
[INFO] cze 28, 2016 11:17:56 AM com.google.apphosting.vmruntime.VmApiProxyDelegate runSyncCall 
[INFO] 
[INFO] INFO: HTTP ApiProxy I/O error for memcache.Get: The target server failed to respond 
[INFO] 
[INFO] cze 28, 2016 11:17:56 AM com.google.appengine.api.memcache.LogAndContinueErrorHandler handleServiceError 
[INFO] 
[INFO] INFO: Service error in memcache 
[INFO] 
[INFO] com.google.appengine.api.memcache.MemcacheServiceException: RCP Failure for API call: memcache Get 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.constructApiException(VmApiProxyDelegate.java:232) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.runSyncCall(VmApiProxyDelegate.java:195) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.makeApiCall(VmApiProxyDelegate.java:154) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.access$000(VmApiProxyDelegate.java:60) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:436) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:412) 
[INFO] 
[INFO] at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
[INFO] 
[INFO] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[INFO] 
[INFO] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[INFO] 
[INFO] at java.lang.Thread.run(Thread.java:745) 
[INFO] 
[INFO] 
[INFO] 
[INFO] DEBUG 2016-06-28 11:17:56,493 api_server.py:277] Handled datastore_v3.Get in 0.0000 
[INFO] cze 28, 2016 11:17:59 AM com.mysql.jdbc.log.Slf4JLogger logInfo 

回答

1

此問題僅在本地複製,我也面對它。我認爲它是由dev服務器運行的本地memcached的錯誤配置引起的。

我會盡力解釋我的觀點。在我的情況下,第一個請求總是成功的。 因爲在第一次請求的情況下Apache HttpClient打開一個新連接並將其放入池中。 有源代碼https://github.com/GoogleCloudPlatform/appengine-java-vm-runtime/blob/master/appengine-managed-runtime/src/main/java/com/google/apphosting/vmruntime/VmApiProxyDelegate.java

所有進一步的請求都是成功的,如果它們的執行間隔長達10秒。但是如果在10秒內沒有請求,則下一個請求失敗。 發生這種情況是因爲memcached服務從其側面關閉連接,但HttpClient不知道它。

VmApiProxyDelegate HttpClient配置爲在60秒後關閉空閒連接。所以,如果我等待超過1分鐘而不是10秒,我的下一個請求就不會失敗。因爲在這種情況下,HttpClient會打開尚未關閉的新連接。

爲了避免這個問題,從memcached存根端配置連接超時是正確的。但是文檔說你對memcached的請求可能會失敗,你必須處理這些錯誤。所以,我提供你添加錯誤處理程序和一些重試機制。

當然,以上所有情況都適合您的情況,如果在您的配置中一切正常。考慮到你沒有提供配置和代碼的例子,我假設一切都很好。