[AWS SDK für Java] Legen Sie die Wiederholungsrichtlinie für den S3-Client fest

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.

Inhaltsverzeichnis

Fallbeschreibung um Wiederholungsversuch

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.

Ich werde versuchen, es vorerst umzusetzen

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.

Organisieren Sie erscheinende Objekte

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 ...

AmazonS3 (Schnittstelle)

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 (Klasse)

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 (Klasse)

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.

Andere

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."

Referenz

Recommended Posts

[AWS SDK für Java] Legen Sie die Wiederholungsrichtlinie für den S3-Client fest
Richten Sie signierte Cookies (für CloudFront) mit benutzerdefinierten Richtlinien mithilfe des AWS SDK für Java ein
Anmeldeinformationen, auf die das AWS SDK für Java standardmäßig verweist
Verschlüsseln Sie Daten, die mit AWS SDK für Java / SSE-KMS in S3 hochgeladen wurden
Hochladen / Herunterladen / Löschen von Daten in S3 mithilfe von Amazon S3 Client Builder mit AWS SDK für Java
Erstellen Sie ein Maven-Repository in AWS S3
Überprüfen Sie die für den laufenden Java-Prozess festgelegten Optionen
Bis Sie ein Java-Programm mit dem für Windows lokalen AWS SDK ausführen
Ich habe einen Testcode (Junit & mockit) für den Code geschrieben, der die AWS-API (Java) aufruft.
Ein Hinweis zum Initialisieren von Feldern im Java-Lernprogramm
Holen Sie sich die S3-Objektgröße mit AWS SDK for Ruby
So stellen Sie eine Kotlin (Java) -App auf AWS fargate bereit
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
Ein Memorandum, um den juckenden Ort für Java Gold zu erreichen
Zugriff auf den S3-Bucket mithilfe der SSE-KMS-Verschlüsselung in der EC2-IAM-Rollenumgebung (AWS SDK für Java)
Behandeln Sie die Geschäftslogik für eine Reihe von Entitäten in einer Java-Klasse
Richten Sie mit Bitnamis AMI ganz einfach einen Jenkins-Server in AWS ein
[Android Studio] Legen Sie ein beliebiges Bild für den Anwendungshintergrund fest. [Java]
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge