1

jetty9-compat + java8 構成を使用すると、次の例外が発生します。おそらくこれが原因で、オブジェクトをセッションに保存できないため、最終的にサービスにログインできません。

[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
4

1 に答える 1

2

この問題はローカルでのみ再現されます。私もそれに直面しています。これは、開発サーバーによって実行されるローカル 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 はそれを認識していません。

HttpClientではVmApiProxyDelegate、60 秒後にアイドル状態の接続を閉じるように構成されています。したがって、10 秒ではなく 1 分以上待機しても、次のリクエストは失敗しません。この場合、HttpClient はまだ閉じられていない新しい接続を開くためです。

この問題を回避するには、memcached スタブ側から接続タイムアウトを構成するのが正しいでしょう。ただし、ドキュメントには、memcached へのリクエストが失敗する可能性があり、これらのエラーを処理する必要があると記載されています。そこで、エラー ハンドラと再試行メカニズムを追加することを提案します。

もちろん、構成ですべてが問題なければ、上記のすべてがあなたのケースに適合します。構成とコードの例を提供しなかったことを考慮して、すべて問題ないと思います。

于 2016-07-04T08:10:26.273 に答える