HTTP-Client-Konfiguration - AWS SDK für Kotlin

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.

HTTP-Client-Konfiguration

Standardmäßig AWS SDK für Kotlin verwendet der einen HTTP-Client, der auf basiert OkHttp. Sie können den HTTP-Client und seine Konfiguration überschreiben, indem Sie einen explizit konfigurierten Client angeben.

Warnung

Unabhängig davon, welche HTTP-Engine Sie verwenden, können andere Abhängigkeiten in Ihrem Projekt transitive Abhängigkeiten aufweisen, die mit der spezifischen Engine-Version in Konflikt stehen, die für das SDK erforderlich ist. Insbesondere Frameworks wie Spring Boot sind dafür bekannt, Abhängigkeiten wie das SDK zu verwalten OkHttp und sich auf ältere Versionen als das SDK zu verlassen. Weitere Informationen Wie löse ich Abhängigkeitskonflikte? finden Sie unter.

Anmerkung

Standardmäßig verwendet jeder Service-Client seine eigene Kopie eines HTTP-Clients. Wenn Sie in Ihrer Anwendung mehrere Dienste verwenden, möchten Sie möglicherweise einen einzelnen HTTP-Client erstellen und ihn für alle Dienstclients gemeinsam nutzen.

Basiskonfiguration

Wenn Sie einen Service-Client konfigurieren, können Sie den Standard-Engine-Typ konfigurieren. Das SDK verwaltet die resultierende HTTP-Client-Engine und schließt sie automatisch, wenn sie nicht mehr benötigt wird.

Das folgende Beispiel zeigt die Konfiguration eines HTTP-Clients während der Initialisierung eines DynamoDB-Clients.

Importe

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import kotlin.time.Duration.Companion.seconds

Code

DynamoDbClient { region = "us-east-2" httpClient { maxConcurrency = 64u connectTimeout = 10.seconds } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }

Erweiterte Konfiguration

Die Standard-HTTP-Konfiguration ist für die meisten Anwendungsfälle geeignet. Für einige erweiterte Anwendungsfälle, wie z. B. Umgebungen mit hohem Durchsatz, bieten die folgenden erweiterten Konfigurationsoptionen zusätzliche Funktionen und Möglichkeiten:

Geben Sie einen HTTP-Engine-Typ an

Um einen nicht standardmäßigen HTTP-Engine-Typ anzugeben oder um die Konfiguration anzupassen, die für einen bestimmten HTTP-Engine-Typ spezifisch ist, können Sie einen zusätzlichen Parameter übergeben, der den Engine-Typ httpClient angibt.

Das folgende Beispiel gibt den an OkHttpEngine, den Sie zur Konfiguration der maxConcurrencyPerHostEigenschaft verwenden können.

Importe

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine

Code

DynamoDbClient { region = "us-east-2" httpClient(OkHttpEngine) { // The first parameter specifies the HTTP engine type. // The following parameter is generic HTTP configuration available in any engine type. maxConcurrency = 64u // The following parameter is OkHttp-specific configuration. maxConcurrencyPerHost = 32u } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }

Die möglichen Werte für den Motortyp sind OkHttpEngine OkHttp4Engine, und CrtHttpEngine.

Um für eine HTTP-Engine spezifische Konfigurationsparameter zu verwenden, müssen Sie die Engine als Abhängigkeit zur Kompilierzeit hinzufügen. Für die OkHttpEngine fügen Sie mit Gradle die folgende Abhängigkeit hinzu.

(Sie können zum X.Y.Z Link navigieren, um die neueste verfügbare Version zu sehen.)

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-okhttp")

Fügen Sie für CrtHttpEngine die die folgende Abhängigkeit hinzu.

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-crt")

Verwenden der OkHttp4Engine

Verwenden Sie dieOkHttp4Engine, wenn Sie die Standardeinstellung nicht verwenden könnenOkHttpEngine. Das GitHub Smithy-Kotlin-Repository enthält Informationen darüber, wie Sie das konfigurieren und verwenden. OkHttp4Engine

Verwenden Sie einen expliziten HTTP-Client

Wenn Sie einen expliziten HTTP-Client verwenden, sind Sie für dessen Lebensdauer verantwortlich, einschließlich dessen Schließung, wenn Sie ihn nicht mehr benötigen. Ein HTTP-Client muss mindestens so lange aktiv sein wie jeder Service-Client, der ihn verwendet.

Das folgende Codebeispiel zeigt Code, der dafür sorgt, dass der HTTP-Client aktiv bleibt, solange der aktiv DynamoDbClient ist. Die useFunktion stellt sicher, dass der HTTP-Client ordnungsgemäß geschlossen wird.

Importe
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.seconds
Code
OkHttpEngine { maxConcurrency = 64u connectTimeout = 10.seconds }.use { okHttpClient -> DynamoDbClient { region = "us-east-2" httpClient = okHttpClient }.use { ddb -> { // Perform some actions with Amazon DynamoDB. } } }

Überwachung inaktiver Verbindungen

OkHttpEnginebietet die connectionIdlePollingIntervalKonfigurationsoption zur Überwachung inaktiver Verbindungen für das Schließen per Fernzugriff. Diese Funktion erkennt, wenn Dienste Verbindungen geschlossen haben, die sich noch im Verbindungspool befinden, und verhindert so Fehler bei nachfolgenden Anfragen.

Wenn der Wert auf einen Wert ungleich Null gesetzt connectionIdlePollingInterval ist, fragt die Engine Verbindungen, die freigegeben wurden, zurück zum Verbindungspool. Bei der Abfrage werden Lesevorgänge blockiert, wobei das Socket-Timeout auf das angegebene Intervall eingestellt ist. Die Abfrage wird automatisch abgebrochen, wenn die Engine die Verbindung aus dem Pool bezieht oder wenn die Verbindung gelöscht und geschlossen wird.

Wenn dieser Wert null (Standard) ist, ist das Polling deaktiviert. Bei inaktiven Verbindungen im Pool, die remote geschlossen wurden, können Fehler auftreten, wenn sie für nachfolgende Aufrufe abgerufen werden.

Anmerkung

Da die Abfrageschleife blockierende Lesevorgänge verwendet, können Engine-Aufrufe zum Herstellen oder Schließen einer Verbindung um das connectionIdlePollingInterval Intervall verzögert werden. Wenn Sie für das Intervall einen niedrigen Wert wählen, nimmt das SDK schneller Verbindungen auf, allerdings auf Kosten einer höheren Ressourcenauslastung im Leerlauf.

Importe

import aws.sdk.kotlin.services.s3.S3Client import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.milliseconds

Code

S3Client.fromEnvironment { httpEngine(OkHttpEngine) { connectionIdlePollingInterval = 50.milliseconds } }.use { s3 -> // Use the Amazon S3 client }