Den Apache-basierten HTTP-Client konfigurieren - AWS SDK for Java 2.x

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Den Apache-basierten HTTP-Client konfigurieren

Synchrone Service-Clients AWS SDK for Java 2.x verwenden standardmäßig einen Apache-basierten HTTP-Client. ApacheHttpClient Die SDKs basieren auf dem ApacheHttpClient Apache. HttpClient

Das SDK bietet auch das UrlConnectionHttpClient, das schneller geladen wird, aber weniger Funktionen hat. Hinweise zur Konfiguration von finden UrlConnectionHttpClient Sie unterDen URL-verbindungsbasierten HTTP-Client konfigurieren.

Alle verfügbaren Konfigurationsoptionen für finden Sie unter ApacheHttpClient.Builder und ProxyConfiguration.Builder. ApacheHttpClient

Greifen Sie auf ApacheHttpClient

In den meisten Situationen verwenden Sie die ApacheHttpClient ohne explizite Konfiguration. Sie deklarieren Ihre Service-Clients und das SDK konfiguriert sie ApacheHttpClient mit Standardwerten für Sie.

Wenn Sie den explizit konfigurieren ApacheHttpClient oder ihn mit mehreren Service-Clients verwenden möchten, müssen Sie ihn für die Konfiguration verfügbar machen.

Keine Konfiguration erforderlich

Wenn Sie in Maven eine Abhängigkeit von einem Service-Client deklarieren, fügt das SDK eine Laufzeitabhängigkeit von dem apache-client Artefakt hinzu. Dadurch steht die ApacheHttpClient Klasse Ihrem Code zur Laufzeit zur Verfügung, aber nicht zur Kompilierzeit. Wenn Sie den Apache-basierten HTTP-Client nicht konfigurieren, müssen Sie dafür keine Abhängigkeit angeben.

Im folgenden XML-Snippet einer pom.xml Maven-Datei wird durch die mit deklarierte Abhängigkeit <artifactId>s3</artifactId> automatisch der Apache-basierte HTTP-Client eingebunden. Sie müssen keine spezielle Abhängigkeit dafür deklarieren.

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.17.290</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient--> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>

Mit diesen Abhängigkeiten können Sie keine expliziten Änderungen an der HTTP-Konfiguration vornehmen, da sich die ApacheHttpClient Bibliothek nur im Laufzeit-Klassenpfad befindet.

Konfiguration erforderlich

Um das zu konfigurierenApacheHttpClient, müssen Sie bei der Kompilierung eine Abhängigkeit von der apache-client Bibliothek hinzufügen.

Sehen Sie sich das folgende Beispiel für eine pom.xml Maven-Datei an, um die ApacheHttpClient zu konfigurieren.

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.17.290</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- By adding the apache-client dependency, ApacheHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </dependency> </dependencies>

Verwenden und konfigurieren Sie den ApacheHttpClient

Sie können eine Instanz von ApacheHttpClient konfigurieren und gleichzeitig einen Service Client erstellen, oder Sie können eine einzelne Instanz so konfigurieren, dass sie von mehreren Service Clients gemeinsam genutzt wird.

Bei beiden Ansätzen verwenden Sie den, ApacheHttpClient.Builder um die Eigenschaften für den Apache-basierten HTTP-Client zu konfigurieren.

Bewährtes Verfahren: Weisen Sie einem Service-Client eine ApacheHttpClient Instanz zu

Wenn Sie eine Instanz von konfigurieren müssen, empfehlen wir IhnenApacheHttpClient, die dedizierte ApacheHttpClient Instanz zu erstellen. Sie können dies tun, indem Sie die httpClientBuilder Methode des Builders des Service-Clients verwenden. Auf diese Weise wird der Lebenszyklus des HTTP-Clients vom SDK verwaltet, wodurch potenzielle Speicherlecks vermieden werden, wenn die ApacheHttpClient Instanz nicht geschlossen wird, wenn sie nicht mehr benötigt wird.

Im folgenden Beispiel wird eine S3Client eingebettete Instanz von ApacheHttpClient with maxConnections and connectionTimeout values erstellt und konfiguriert. Die HTTP-Instanz wird mit der httpClientBuilder Methode von S3Client.Builder erstellt.

Importe

import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.s3.S3Client; import java.time.Duration;

Code

S3Client s3Client = S3Client // Singleton: Use the s3Client for all requests. .builder() .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) ).build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close all service clients.

Alternativer Ansatz: Eine ApacheHttpClient Instanz teilen

Um den Ressourcen- und Speicherverbrauch für Ihre Anwendung zu senken, können Sie eine konfigurieren ApacheHttpClient und sie von mehreren Service-Clients gemeinsam nutzen. Der HTTP-Verbindungspool wird gemeinsam genutzt, wodurch die Ressourcennutzung gesenkt wird.

Anmerkung

Wenn eine ApacheHttpClient Instanz gemeinsam genutzt wird, müssen Sie sie schließen, wenn sie bereit ist, gelöscht zu werden. Das SDK schließt die Instanz nicht, wenn der Service-Client geschlossen wird.

Im folgenden Beispiel wird ein Apache-basierter HTTP-Client konfiguriert, der von zwei Service-Clients verwendet wird. Die konfigurierte ApacheHttpClient Instanz wird an die httpClient Methode jedes Builders übergeben. Wenn die Service-Clients und der HTTP-Client nicht mehr benötigt werden, werden sie durch den Code explizit geschlossen. Der Code schließt den HTTP-Client zuletzt.

Importe

import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;

Code

SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .maxConnections(100).build(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(apacheHttpClient).build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient).build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); apacheHttpClient.close(); // Explicitly close apacheHttpClient.

Beispiel für eine Proxykonfiguration

Der folgende Codeausschnitt verwendet den Proxykonfigurationsgenerator für den Apache HTTP-Client.

SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://example.com:1234")) .username("username") .password("password") .addNonProxyHost("localhost") .addNonProxyHost("host.example.com") .build()) .build();

Die entsprechenden Java-Systemeigenschaften für die Proxykonfiguration werden im folgenden Befehlszeilenausschnitt angezeigt.

$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App

Das äquivalente Setup, das Umgebungsvariablen verwendet, ist:

// Set the following environment variables. // $ export HTTP_PROXY="http://username:password@example.com:1234" // $ export NO_PROXY="localhost|host.example.com" // Set the 'useSystemPropertyValues' to false on the proxy configuration. SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
Anmerkung

Der Apache HTTP-Client unterstützt derzeit keine HTTPS-Proxy-Systemeigenschaften oder die Umgebungsvariable HTTPS_PROXY.