Auslösen einer HTTP-Anforderung von einem HTTP-Client, der mit "org.apache.http.client" generiert wurde Ich möchte es abhängig vom zurückgegebenen HTTP-Status (200, 404, 503 usw.) erneut versuchen. Es gibt eine Zeit zu sagen und die Lösung zu dieser Zeit.
(Das Projektmitglied sagte mir, dass es schwierig sei, die Version zu schreiben, daher werde ich vorerst die Arbeitsversion schreiben.)
Es wurde bestätigt, in der Umgebung mit zu arbeiten!
Anstelle eines Memorandums, in der Hoffnung, dass es eines Tages jemandem helfen wird.
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout).build();
final HttpClientBuilder hcBuilder = HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
//Wiederholen Sie diesen Vorgang, wenn ein HTTP-E / A-Fehler auftritt
.setRetryHandler(new DefaultHttpRequestRetryHandler())
//Ob ein erneuter Versuch erforderlich ist oder nicht, hängt vom booleschen Wert von retryRequest zum Zeitpunkt der HTTP-Anforderung ab
.setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() {
@Override
public boolean retryRequest(
final HttpResponse response, final int executionCount, final HttpContext context) {
int statusCode = response.getStatusLine().getStatusCode();
return Arrays.asList(RETRY_HTTP_STATUSES).contains(statusCode)
&& executionCount < MAX_RETRY_COUNT;
}
@Override
public long getRetryInterval() {
return RETRY_INTERVAL_MILLI_SEC;
}
});
return hcBuilder.build();
Unnötig zu sagen, aber wenn Sie ergänzen
-RETRY_HTTP_STATUSES
ist ein Array vom Typ "Ganzzahl" und definiert die "HTTP-Statuscodegruppe", die Sie erneut versuchen möchten.
MA MAX_RETRY_COUNT
definiert die maximale Anzahl von Wiederholungsversuchen
.
-RETRY_INTERVAL_MILL_SEC
definiert die Millisekunde des Wiederholungsintervalls
.
Jetzt kann sogar ein Programmierer zum Kopieren / Einfügen einen Wiederholungsvorgang schreiben!
Recommended Posts