Die Informationen, die ich nur wollte, waren nicht auf Japanisch, also werde ich sie dokumentieren. Fügen Sie beim Hochladen einer Datei in S3 mit dem AWS SDK für Java einige detaillierte Einstellungen hinzu.
Ich möchte eine Datei lokal mit dem AWS SDK für Java in S3 hochladen. In Erwartung eines Falls, in dem die Kommunikation aufgrund der Umstände von AWS unterbrochen wird oder aus verschiedenen Gründen nicht normal funktioniert, möchten wir eine Wiederholungsrichtlinie in den AWS-Client integrieren. Dieses Mal bereiten wir eine Dienstprogrammklasse vor, die einen Singleton des im AWS SDK für Java enthaltenen AmazonS3-Objekts zurückgibt.
In diesem Artikel werde ich mich auf "Optionseinstellungen beim Generieren eines Clients" konzentrieren, mit denen ich besonders beunruhigt war. Daher wird die Beschreibung zur Verarbeitung vor und nach dem Hochladen der Datei weggelassen.
Erstellen Sie einen Client mit einfachen Clientoptionen. Als Ablauf bereiten wir drei vor, eine Instanz für Wiederholungsrichtlinien, eine Clienteinstellungsinstanz und einen Client.
Bereiten Sie zunächst eine Methode vor, die eine RetryPolicy-Instanz zurückgibt, die grundlegende Richtlinieneinstellungen und AWS-definierte Strategien enthält.
AmazonS3Utils.java
/**
*Fügen Sie die entsprechenden Werte für baseDelay und maxBackoffTime in den Konstruktor von ExponentialBackoffStrategy ein.
*Hinweis: Hier wird ein geeigneter Wert als Beispiel eingegeben.
*/
private static RetryPolicy getS3BaseRetryPolicy() {
return new RetryPolicy(
new PredefinedRetryPolicies.SDKDefaultRetryCondition(),
new PredefinedBackoffStrategies.ExponentialBackoffStrategy(0, 0),
PredefinedRetryPolicies.DEFAULT_MAX_ERROR_RETRY,
true
);
}
Rufen Sie als Nächstes die Methode auf, die die in ↑ definierte Instanz "RetryPolicy" zurückgibt, um die Clienteinstellungen zu definieren.
AmazonS3Utils.java
private static final ClientConfiguration clientConfiguration = new ClientConfiguration()
.withRetryPolicy(getS3BaseRetryPolicy());
Initialisieren Sie dann das AmazonS3-Objekt, das der Einstiegspunkt des S3-Clients ist, der von anderen Klassen und Methoden aufgerufen wird, mit den Clienteinstellungen.
AmazonS3Utils.java
private static final AmazonS3 amazonS3 = AmazonS3ClientBuilder
.standard()
.withClientConfiguration(clientConfiguration)
.withRegion(Regions.DEFAULT_REGION)
.build();
Um die bisherigen Einstellungen zusammenzufassen:
AmazonS3Utils.java
public final class AmazonS3Utils {
/**
*Initialisieren Sie die Clienteinstellungen entsprechend der Wiederholungsrichtlinie.
*/
private static final ClientConfiguration clientConfiguration = new ClientConfiguration()
.withRetryPolicy(getS3BaseRetryPolicy());
/**
*Initialisieren Sie die Amazon S3-Instanz.
*/
private static final AmazonS3 amazonS3 = AmazonS3ClientBuilder
.standard()
.withClientConfiguration(clientConfiguration)
.withRegion(Regions.DEFAULT_REGION).build();
/**
*Gibt ein Objekt zurück, das eine Dateioperation bereitstellt
*/
public static AmazonS3 getS3() {
return amazonS3;
}
/**
*Sofortige Wiederholungsrichtlinie.
*/
private static RetryPolicy getS3BaseRetryPolicy() {
return new RetryPolicy(
new PredefinedRetryPolicies.SDKDefaultRetryCondition(),
new PredefinedBackoffStrategies.ExponentialBackoffStrategy(0, 0),
PredefinedRetryPolicies.DEFAULT_MAX_ERROR_RETRY,
true
);
}
}
Jetzt bist du bereit. Danach können Sie den S3-Client aufrufen, der die Einstellungen mit der Methode "getS3" widerspiegelt.
Ich möchte die Rollen mehrerer Klassen sortieren, die in den Implementierungsbeispielen erscheinen. Ich hatte nicht das Gefühl, dass ich tun könnte, was ich tun wollte, vielleicht weil ich nicht sicher war, wie ich es nachschlagen sollte ...
Eine Schnittstelle, die Methoden zum Bearbeiten von S3-Objekten definiert.
Die konkrete Implementierung scheint von der Client Builder-Klasse bereitgestellt zu werden.
AmazonS3
Dieses Objekt ist eine Schnittstelle und das Tool scheint von AmazonS3ClientBuilder
usw. bereitgestellt zu werden.
Ursprünglich wurde dies vor dem Hinzufügen der Einstellungen für den Wiederholungsversuch mit "AmazonS3ClientBuilder.standard (). Build ();" durchgeführt. Ich denke, solch ein minimalistischer Client wird ausreichen, wenn er minimale Funktionalität erfordert.
ClientConfiguration ist ein erneuter Versuch Optionale Konfigurationsklassen, die AWS-Clients hinzugefügt werden können, z. B. Proxys und Benutzeragentenzeichenfolgen. In diesem Beispiel habe ich eine leicht angepasste "RetryPolicy" übergeben, aber es scheint, dass die Standardeinstellungen in die Clienteinstellungen gepackt werden können, indem die statische Methode "getDefaultRetryPolicy ()" in "PredefinedRetryPolicies" aufgerufen wird.
RetryPolicy ist Eine Klasse, die eine Wiederholungsrichtlinie in Kombination mit "ClientConfiguration" erstellt. Initialisieren Sie, indem Sie die erforderlichen Objekte und Werte in den Konstruktor packen.
Schnittstellen wie "RetryCondition" und "BackoffStrategy" werden im Konstruktor angegeben, aber zuerst habe ich mich gefragt, was ich für die Klasse angeben soll, die der Schnittstelle des Arguments entspricht. Es gibt mehrere Konstruktoren, aber einer davon ist
RetryPolicy.java
public RetryPolicy(RetryCondition retryCondition,
BackoffStrategy backoffStrategy,
int maxErrorRetry,
boolean honorMaxErrorRetryInClientConfig) {
this(retryCondition, backoffStrategy, maxErrorRetry, honorMaxErrorRetryInClientConfig, false);
}
Nach vielen Recherchen stellte ich fest, dass das SDK eine Klasse hatte, die mit einigen vordefinierten Richtlinien gefüllt werden konnte.
Für die RetryCondition-Schnittstelle haben wir uns entschlossen, die AWS SDK-Standardeinstellungen für diese Implementierung zu befolgen. In PredefinedRetryPolicies Es gibt verschiedene Arten von Implementierungen, die verwendet werden können, sodass Sie sie an den RetryPolicy-Konstruktor übergeben können. Wenn Sie die Einstellungen nicht genau kennen, können Sie die statische Eigenschaft "DEFAULT_RETRY_CONDITION" angeben, die die Standardeinstellungen zurückgibt.
BackoffStrategy Erweiterte abstrakte Klasse [V2CompatibleBackoffStrategy](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/retry/V2CompatibleBackoffStrategy. Java) wird bereitgestellt, und Sie können Argumente festlegen, die der BackoffStrategy-Schnittstelle entsprechen, indem Sie einen Adapter verwenden, der diese abstrakte Klasse und verschiedene konkrete Klassen erweitert.
Insbesondere [PredefinedBackoffStrategies](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/retry/PredefinedBackoffStrategies. Java) ist eine Erweiterung von V2CompatibleBackoffStrategyAdapter
,
Usw. hergestellt werden. Bei der Initialisierung von RetryPolicy können detaillierte Einstellungen vorgenommen werden, indem BackoffStrategy an den Konstruktor übergeben wird.
Es ist eigentlich ein offizielles Dokument, und ich habe das Gefühl, dass es etwas gibt, das es gut erklärt ... Ich konnte mich nicht finden, also würde ich es begrüßen, wenn Sie darauf hinweisen könnten, wenn es so etwas wie "Es tut mir leid, wenn ich das lese, auch wenn ich das nicht kann."
Recommended Posts