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

HTTPKunden

Sie können den HTTP Client ändern, der für Ihren Service-Client verwendet werden soll, sowie die Standardkonfiguration für HTTP Clients mit dem ändern AWS SDK for Java 2.x. In diesem Abschnitt werden HTTP Clients und Einstellungen für die beschriebenSDK.

HTTPClients, die in der SDK für Java verfügbar sind

Synchrone Clients

Synchrone HTTP Clients in der SDK für Java implementieren die SdkHttpClientSchnittstelle. Ein synchroner Dienstclient, wie der S3Client oder derDynamoDbClient, erfordert die Verwendung eines synchronen HTTP Clients. Der AWS SDK for Java bietet drei synchrone HTTP Clients.

ApacheHttpClient (Standard)

ApacheHttpClientist der HTTP Standardclient für synchrone Dienstclients. Hinweise zur Konfiguration von finden Sie ApacheHttpClient unterDen HTTP Apache-basierten Client konfigurieren.

AwsCrtHttpClient

AwsCrtHttpClientbietet hohen Durchsatz und blockierungsfreie I/O. Es basiert auf dem AWS Common Runtime (CRT) Http Client. Hinweise zur Konfiguration AwsCrtHttpClient und Verwendung mit Service-Clients finden Sie unterKonfiguration von AWS CRT basierten HTTP Clients.

UrlConnectionHttpClient

Um die Anzahl der von Ihrer Anwendung verwendeten JAR-Dateien und Bibliotheken von Drittanbietern zu minimieren, können Sie die verwenden UrlConnectionHttpClient. Hinweise zur Konfiguration von finden UrlConnectionHttpClient Sie unterDen URLConnection basierten HTTP Client konfigurieren.

Asynchrone Clients

Asynchrone HTTP Clients in der SDK für Java implementieren die SdkAsyncHttpClientSchnittstelle. Ein asynchroner Dienstclient, wie der S3AsyncClient oder derDynamoDbAsyncClient, erfordert die Verwendung eines asynchronen HTTP Clients. Der AWS SDK for Java bietet zwei asynchrone HTTP Clients.

NettyNioAsyncHttpClient (Standard)

NettyNioAsyncHttpClientist der HTTP Standardclient, der von asynchronen Clients verwendet wird. Hinweise zur Konfiguration von finden Sie NettyNioAsyncHttpClient unterDen Netty-basierten Client HTTP konfigurieren.

AwsCrtAsyncHttpClient

Der AwsCrtAsyncHttpClientbasiert auf dem AWS Common Runtime (CRT) HTTP Client. Hinweise zur Konfiguration von finden AwsCrtAsyncHttpClient Sie unterKonfiguration von AWS CRT basierten HTTP Clients.

HTTPEmpfehlungen des Kunden

Bei der Auswahl einer HTTP Kundenimplementierung spielen mehrere Faktoren eine Rolle. Verwenden Sie die folgenden Informationen als Entscheidungshilfe.

Flussdiagramm für Empfehlungen

Das folgende Flussdiagramm enthält allgemeine Hinweise, anhand derer Sie entscheiden können, welcher HTTP Client verwendet werden soll.

Flussdiagramm der HTTP Kundenempfehlungen.

HTTPKundenvergleich

Die folgende Tabelle enthält detaillierte Informationen für jeden HTTP Kunden.

HTTPKunde Synchronisieren oder asynchron Wann sollte dies verwendet werden? Einschränkung/Nachteil
Apache-basierter Client HTTP

(Standard-Synchronisierungsclient) HTTP

Synchronisierung Verwenden Sie ihn, wenn Sie eine niedrige Latenz einem hohen Durchsatz vorziehen Langsamere Startzeit im Vergleich zu anderen HTTP Clients
URLConnectionbasierter HTTP Client Synchronisierung Verwenden Sie ihn, wenn Sie unbedingt die Abhängigkeiten von Drittanbietern einschränken möchten Unterstützt die HTTP PATCH Methode nicht, die für einige Operationen APIS wie Amazon APIGateway Update erforderlich ist
AWS CRTbasierter HTTP Synchronisierungsclient 1 Synchronisierung

• Verwenden Sie es, wenn Ihre Anwendung in läuft AWS Lambda

• Verwenden Sie es, wenn Sie einen hohen Durchsatz einer niedrigen Latenz vorziehen

• Verwenden Sie es, wenn Sie SDK Synchronisierungsclients bevorzugen

Die folgenden Java-Systemeigenschaften werden nicht unterstützt:

  • javax.net.ssl. keyStore

  • javax.net.ssl. keyStorePassword

  • javax.net.ssl. trustStore

  • javax.net.ssl. trustStorePassword

Netty-basierter Client HTTP

(standardmäßiger HTTP asynchroner Client)

Asynchron

• Verwenden Sie es, wenn Ihre Anwendung Aufrufe erfordertAPIs, die HTTP /2-Unterstützung erfordern, z. B. Kinesis API SubscribeToShard

Langsamere Startzeit im Vergleich zu anderen Clients HTTP
AWS CRTbasierter asynchroner HTTP Client 1 Asynchron

• Verwenden Sie es, wenn Ihre Anwendung läuft in AWS Lambda

• Verwenden Sie es, wenn Sie einen hohen Durchsatz einer niedrigen Latenz vorziehen

• Verwenden Sie es, wenn Sie asynchrone Clients SDK bevorzugen

• Unterstützt keine Service-Clients, die HTTP /2-Unterstützung benötigen, wie und KinesisAsynClient TranscribeStreamingAsyncClient

Die folgenden Java-Systemeigenschaften werden nicht unterstützt:

  • javax.net.ssl. keyStore

  • javax.net.ssl. keyStorePassword

  • javax.net.ssl. trustStore

  • javax.net.ssl. trustStorePassword

1 Aufgrund ihrer zusätzlichen Vorteile empfehlen wir, wenn möglich, die AWS CRT basierten HTTP Clients zu verwenden.

Standardeinstellungen für die intelligente Konfiguration

Die AWS SDK for Java 2.x (Version 2.17.102 oder höher) bietet eine Funktion für intelligente Standardeinstellungen für Konfigurationen. Diese Funktion optimiert zwei HTTP Client-Eigenschaften zusammen mit anderen Eigenschaften, die den Client nicht beeinflussen. HTTP

Die Standardeinstellungen der intelligenten Konfiguration legen sinnvolle Werte für die tlsNegotiationTimeoutInMillis Eigenschaften connectTimeoutInMillis und fest, die auf einem von Ihnen angegebenen Standardmoduswert basieren. Sie wählen den Standardmoduswert auf der Grundlage der Eigenschaften Ihrer Anwendung.

Weitere Informationen zu den Standardeinstellungen für intelligente Konfigurationen und zur Auswahl des Standardmoduswerts, der für Ihre Anwendungen am besten geeignet ist, finden Sie im Referenzhandbuch AWS SDKsund im Tools-Referenzhandbuch.

Im Folgenden finden Sie vier Möglichkeiten, den Standardmodus für Ihre Anwendung festzulegen.

Service client

Verwenden Sie den Service Client Builder, um den Standardmodus direkt auf dem Service Client zu konfigurieren. Im folgenden Beispiel wird der Standardmodus auto für den auf festgelegt. DynamoDbClient

DynamoDbClient ddbClient = DynamoDbClient.builder() .defaultsMode(DefaultsMode.AUTO) .build();
System property

Sie können die aws.defaultsMode Systemeigenschaft verwenden, um den Standardmodus anzugeben. Wenn Sie die Systemeigenschaft in Java festlegen, müssen Sie die Eigenschaft festlegen, bevor Sie einen Service-Client initialisieren.

Das folgende Beispiel zeigt Ihnen, wie Sie den Standardmodus so einstellen, dass er eine in auto Java festgelegte Systemeigenschaft verwendet.

System.setProperty("aws.defaultsMode", "auto");

Das folgende Beispiel zeigt, wie Sie den Standardmodus auto mithilfe einer -D Option des Befehls auf „Standardmodus“ festlegen. java

java -Daws.defaultsMode=auto
Environment variable

Geben Sie einen Wert für die Umgebungsvariable einAWS_DEFAULTS_MODE, um den Standardmodus für Ihre Anwendung auszuwählen.

Die folgenden Informationen zeigen den Befehl, der ausgeführt werden muss, um den Wert für den Standardmodus auf die auto Verwendung einer Umgebungsvariablen festzulegen.

Betriebssystem Befehl zum Setzen von Umgebungsvariablen

Linux, macOS oder Unix

export AWS_DEFAULTS_MODE=auto

Windows

set AWS_DEFAULTS_MODE=auto
AWS config file

Sie können der gemeinsam genutzten AWS config Datei eine defaults_mode Konfigurationseigenschaft hinzufügen, wie das folgende Beispiel zeigt.

[default] defaults_mode = auto

Wenn Sie den Standardmodus global mit der Systemeigenschaft, der Umgebungsvariablen oder der AWS Konfigurationsdatei festlegen, können Sie die Einstellungen beim Erstellen eines HTTP Clients überschreiben.

Wenn Sie mit httpClientBuilder() dieser Methode einen HTTP Client erstellen, gelten die Einstellungen nur für die Instanz, die Sie gerade erstellen. Ein Beispiel dafür wird hier gezeigt. Der auf Netty basierende HTTP Client in diesem Beispiel überschreibt alle global für und festgelegten Standardmoduswerte. connectTimeoutInMillis tlsNegotiationTimeoutInMillis