Les informations que je voulais juste n'étaient pas en japonais, alors je vais les documenter. Lors du téléchargement d'un fichier vers S3 à l'aide du kit AWS SDK pour Java, ajoutez des paramètres détaillés.
Je souhaite télécharger un fichier sur S3 localement à l'aide du kit SDK AWS pour Java. Ensuite, en prévision d'un cas où la communication est interrompue en raison des circonstances d'AWS ou qu'elle ne peut pas fonctionner normalement pour diverses raisons, nous aimerions intégrer une politique de nouvelle tentative dans le client AWS. Cette fois, nous préparerons une classe utilitaire qui renvoie un singleton d'objets ʻAmazonS3` inclus dans le kit AWS SDK pour Java.
Dans cet article, je me concentrerai sur les «paramètres d'options lors de la génération d'un client», ce qui m'a particulièrement troublé. Par conséquent, la description relative au traitement avant et après le téléchargement du fichier est omise.
Créez un client doté d'options client simples. En tant que flux, nous en préparerons trois, une instance de stratégie de nouvelle tentative, une instance de paramètre client et un client.
Tout d'abord, préparez une méthode qui renvoie une instance RetryPolicy
contenant les paramètres de stratégie de base et les stratégies définies par AWS.
AmazonS3Utils.java
/**
*Entrez les valeurs appropriées pour baseDelay et maxBackoffTime dans le constructeur ExponentialBackoffStrategy.
*Remarque: Ici, une valeur appropriée est entrée comme échantillon.
*/
private static RetryPolicy getS3BaseRetryPolicy() {
return new RetryPolicy(
new PredefinedRetryPolicies.SDKDefaultRetryCondition(),
new PredefinedBackoffStrategies.ExponentialBackoffStrategy(0, 0),
PredefinedRetryPolicies.DEFAULT_MAX_ERROR_RETRY,
true
);
}
Ensuite, appelez la méthode qui renvoie l'instance RetryPolicy
définie dans ↑ pour définir les paramètres du client.
AmazonS3Utils.java
private static final ClientConfiguration clientConfiguration = new ClientConfiguration()
.withRetryPolicy(getS3BaseRetryPolicy());
Ensuite, initialisez l'objet ʻAmazonS3`, qui est le point d'entrée du client S3 appelé par d'autres classes et méthodes, avec les paramètres du client.
AmazonS3Utils.java
private static final AmazonS3 amazonS3 = AmazonS3ClientBuilder
.standard()
.withClientConfiguration(clientConfiguration)
.withRegion(Regions.DEFAULT_REGION)
.build();
Pour résumer les paramètres jusqu'à présent,
AmazonS3Utils.java
public final class AmazonS3Utils {
/**
*Initialisez les paramètres du client pour refléter la stratégie de nouvelle tentative.
*/
private static final ClientConfiguration clientConfiguration = new ClientConfiguration()
.withRetryPolicy(getS3BaseRetryPolicy());
/**
*Initialisez l'instance Amazon S3.
*/
private static final AmazonS3 amazonS3 = AmazonS3ClientBuilder
.standard()
.withClientConfiguration(clientConfiguration)
.withRegion(Regions.DEFAULT_REGION).build();
/**
*Renvoie un objet qui fournit une opération de fichier
*/
public static AmazonS3 getS3() {
return amazonS3;
}
/**
*Instanciez la stratégie de nouvelle tentative.
*/
private static RetryPolicy getS3BaseRetryPolicy() {
return new RetryPolicy(
new PredefinedRetryPolicies.SDKDefaultRetryCondition(),
new PredefinedBackoffStrategies.ExponentialBackoffStrategy(0, 0),
PredefinedRetryPolicies.DEFAULT_MAX_ERROR_RETRY,
true
);
}
}
Vous êtes maintenant prêt. Après cela, vous pouvez appeler le client S3 qui reflète les paramètres avec la méthode getS3
.
Je voudrais trier les rôles de plusieurs classes qui apparaissent dans les exemples d'implémentation. Je n'avais pas l'impression de pouvoir faire ce que je voulais faire, peut-être parce que je ne savais pas trop comment chercher ...
Une interface qui définit les méthodes de manipulation des objets S3. L'implémentation concrète semble être fournie par la classe client builder. AmazonS3 Cet objet est une interface, et l'outil semble être fourni par ʻAmazonS3ClientBuilder` etc.
À l'origine, avant d'ajouter les paramètres autour de la nouvelle tentative, cela a été fait avec ʻAmazonS3ClientBuilder.standard (). Build (); `. Je pense qu'un client aussi minimaliste suffira s'il nécessite un minimum de fonctionnalités.
ClientConfiguration est une nouvelle tentative Classes de configuration facultatives pouvant être ajoutées aux clients AWS, telles que les proxys et les chaînes d'agent utilisateur.
Dans cet exemple, j'ai passé RetryPolicy
avec une certaine personnalisation, mais il semble que les paramètres par défaut peuvent être intégrés dans les paramètres du client en appelant la méthode statique getDefaultRetryPolicy () ʻin
PredefinedRetryPolicies`.
RetryPolicy est Une classe qui construit une stratégie de nouvelle tentative en combinaison avec ClientConfiguration
.
Initialisez en emballant les objets et les valeurs nécessaires dans le constructeur.
Les interfaces telles que RetryCondition
et BackoffStrategy
sont spécifiées comme arguments dans le constructeur, mais au début, je me demandais quoi spécifier pour la classe qui correspond à l'interface de l'argument. Il existe plusieurs constructeurs, mais l'un d'eux est
RetryPolicy.java
public RetryPolicy(RetryCondition retryCondition,
BackoffStrategy backoffStrategy,
int maxErrorRetry,
boolean honorMaxErrorRetryInClientConfig) {
this(retryCondition, backoffStrategy, maxErrorRetry, honorMaxErrorRetryInClientConfig, false);
}
Après de nombreuses recherches, j'ai trouvé que le SDK avait une classe qui pouvait contenir des politiques prédéfinies.
Pour l'interface RetryCondition
, nous avons décidé de suivre les valeurs par défaut du kit AWS SDK pour cette implémentation. Dans PredefinedRetryPolicies Il existe plusieurs types d'implémentations qui peuvent être utilisées, vous pouvez donc les passer au constructeur RetryPolicy
.
Si vous n'êtes pas particulier sur les paramètres, vous pouvez spécifier la propriété statique DEFAULT_RETRY_CONDITION
qui renvoie les paramètres par défaut.
BackoffStrategy Classe abstraite étendue [V2CompatibleBackoffStrategy](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/retry/V2CompatibleBackoffStrategy. java) est fourni, et vous pouvez définir des arguments équivalents à l'interface BackoffStrategy
en utilisant un adaptateur qui étend cette classe abstraite et diverses classes concrètes.
Plus précisément, [PredefinedBackoffStrategies](https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/retry/PredefinedBackoffStrategies. java) est une extension de V2CompatibleBackoffStrategyAdapter
,
Etc. sont préparés. Lors de l'initialisation de RetryPolicy, il est possible de définir des paramètres détaillés en passant BackoffStrategy au constructeur.
C'est en fait un document officiel, et j'ai le sentiment qu'il y a quelque chose qui l'explique bien ... Je ne pouvais pas me trouver, alors j'apprécierais que vous puissiez indiquer s'il y avait quelque chose comme "Je suis désolé si j'ai lu ceci même si je ne peux pas le faire."
Recommended Posts