Ich habe ein Szenario, wo ich eine CacheRefresh.do-URL von einem HTTP-Client traf. Es erreicht App Server A, A aktualisiert seinen eigenen Cache und sendet dann eine Anforderung (ich verwende URLConnection) an App Server B, um seinen Cache zu aktualisieren. (Ich weiß, es ist ein schlechtes Design, aber wir sind aus Option)HTTP 400-Fehler, wenn Server eine lange http-Anfrage an einen anderen Server auslöst
Nun, wenn meine Anfrage kleinen Cache (kleine Reaktionszeit) ist aufzufrischen, alles sieht gut aus, ich bekomme einen 200
Aber wenn meine Anfrage ist, um großen Cache zu aktualisieren, bekomme ich eine 400.
Server A und B werden auch in diesem Fall aktualisiert, aber warum bekomme ich eine 400 zurück als Antwort? Irgendeine Idee ?
Unten ist der Controller-Code:
@SuppressWarnings("unused")
public ModelAndView handleRequest(final HttpServletRequest request, final HttpServletResponse response)
throws Exception {
final long cacheRefreshStartTime = System.currentTimeMillis();
final String action = request.getParameter("action");
// Init to 74 since this is the static length that will be appended.
final StringBuffer result = new StringBuffer(74);
final String[] cacheKeys = request.getParameterValues("cacheKeys");
String[] cacheElement = request.getParameterValues("cacheElement");
final String refreshByKeyRegion = request.getParameter("refreshByKeyRegion");
final String refreshByKeyRegionKeys = request.getParameter("refreshByKeyRegionKeys");
final String refreshPartnerInstanceCache = request.getParameter("refreshPartnerInstanceCache");
LOG.debug(" cacheKeys for refresh " + Arrays.toString(cacheKeys));
try {
if (action.equalsIgnoreCase("ALL")) {
performancLogger.info("Cache Refresh requested action=" + action);
this.refreshAllCache();
} else if (action.equalsIgnoreCase("SPECIFIC")) {
performancLogger.info("Cache Refresh requested action=" + action + " keys="
+ Arrays.toString(cacheKeys));
this.refreshSpecificCache(cacheKeys);
} else if (action.equalsIgnoreCase("cacheElement")) {
if (refreshByKeyRegion != null && refreshByKeyRegion.length() > 0 && refreshByKeyRegionKeys != null
&& refreshByKeyRegionKeys.length() > 0) {
cacheElement = new String[] { refreshByKeyRegion + "," + refreshByKeyRegionKeys };
}
performancLogger.info("Cache Refresh requested action=" + action + " element="
+ Arrays.toString(cacheElement));
this.refreshCacheElements(cacheElement);
}
if (!request.getServerName().contains("localhost") && refreshPartnerInstanceCache != null
&& refreshPartnerInstanceCache.equals("true")) {
refreshPartnerInstanceCache(request);
}
result.append("Cache refresh completed successfully.");
if (cacheKeys != null) {
result.append(" Keys - ");
result.append(this.formatArrayAsString(cacheKeys));
}
} catch (final Exception e) {
result.append("Cache refresh failed.");
if (cacheKeys != null) {
result.append(" Keys - ");
result.append(this.formatArrayAsString(cacheKeys));
}
}
if (action != null) {
performancLogger.info("Cache Refresh competed total refresh time = "
+ formatElapsedTime(System.currentTimeMillis() - cacheRefreshStartTime));
}
return new ModelAndView(IVRControllerNames.CACHE_REFRESH_STANDARD_VIEW, "displayInfo", this
.getDisplayInfo(result));
}
Request-Header:
POST xxxxx.do HTTP/1.1
Host: xxxxx
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://xxx/yyy/zzz/cacheView.do
Cookie: JSESSIONID=xxxxx.x.x
Anfrage Körper:
Content-Type: application/x-www-form-urlencoded
Content-Length: 134
action=SPECIFIC&refreshPartnerInstanceCache=true&cacheKeys=xxxx&cacheKeys=xxx&Refresh=yyyy
Dank!
könnten Sie einen Code Ihrer Anfrage posten und was AppServer damit tun? –
@ PlínioPantaleão: Code-Snippets oben in der Frage hinzugefügt. Bedenken Sie, wenn ich eine Anfrage nur 2 oder 3 Caches zu aktualisieren, es funktioniert gut. aber wenn ich eine lange Verarbeitung anfordere (zB 7-8 oder mehr Caches). Da bin ich mit diesem Problem konfrontiert. Ich glaube, es hat etwas damit zu tun, dass meine erste Anfrage Timedout oder etwas, nicht sicher? – user620339