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 URLConnection basierten HTTP-Client konfigurieren
Der AWS SDK for Java 2.x bietet im Vergleich zum Standard einen leichteren UrlConnectionHttpClient HTTP-Client. ApacheHttpClient Der UrlConnectionHttpClient basiert auf dem von Java. URLConnection
Der UrlConnectionHttpClient wird schneller geladen als der Apache-basierte HTTP-Client, hat aber weniger Funktionen. Da er schneller geladen wird, ist er eine gute Lösung für Java-Funktionen. AWS Lambda
Das UrlConnectionHttpClient hat mehrere konfigurierbare Optionen
Anmerkung
Der UrlConnectionHttpClient unterstützt die HTTP-PATCH-Methode nicht.
Für eine Handvoll AWS API-Operationen sind PATCH-Anfragen erforderlich. Diese Operationsnamen beginnen normalerweise mitUpdate*. Im Folgenden finden Sie einige Beispiele.
-
Verschiedene
Update*Operationen in der AWS Security Hub API und auch die BatchUpdateFindingsOperation -
Alle Amazon API Gateway
Update*Gateway-API-Operationen
Wenn Sie die verwenden könntenUrlConnectionHttpClient, lesen Sie zunächst in der API-Referenz nach AWS-Service , die Sie verwenden. Prüfen Sie, ob die Operationen, die Sie benötigen, den PATCH-Vorgang verwenden.
Greifen Sie auf UrlConnectionHttpClient
Um das zu konfigurieren und zu verwendenUrlConnectionHttpClient, deklarieren Sie eine Abhängigkeit vom url-connection-client Maven-Artefakt in Ihrer pom.xml Datei.
Im Gegensatz zu UrlConnectionHttpClient wird das nicht automatisch zu Ihrem Projekt hinzugefügt, daher muss es von use ausdrücklich deklariert werden. ApacheHttpClient
Das folgende Beispiel einer pom.xml Datei zeigt die Abhängigkeiten, die für die Verwendung und Konfiguration des HTTP-Clients erforderlich sind.
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- other dependencies such as s3 or dynamodb --> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </dependency> </dependencies>
Verwenden und konfigurieren Sie UrlConnectionHttpClient
Sie können eine Instanz von UrlConnectionHttpClient 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 UrlConnectionHttpClient.Builder
Bewährtes Verfahren: Dedizieren Sie eine UrlConnectionHttpClient Instanz einem Service-Client
Wenn Sie eine Instanz von konfigurieren müssen, empfehlen wir IhnenUrlConnectionHttpClient, die dedizierte UrlConnectionHttpClient 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 UrlConnectionHttpClient Instanz nicht geschlossen wird, wenn sie nicht mehr benötigt wird.
Im folgenden Beispiel wird eine S3Client eingebettete Instanz von UrlConnectionHttpClient with socketTimeout and proxyConfiguration values erstellt und konfiguriert. Die proxyConfiguration Methode verwendet einen Java-Lambda-Ausdruck vom Typ. Consumer<ProxyConfiguration.Builder
Importe
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.net.URI; import java.time.Duration;
Code
// Singleton: Use the s3Client for all requests. S3Client s3Client = S3Client.builder() .httpClientBuilder(UrlConnectionHttpClient.builder() .socketTimeout(Duration.ofMinutes(5)) .proxyConfiguration(proxy -> proxy.endpoint(URI.create("http://proxy.mydomain.net:8888")))) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close the s3client.
Alternativer Ansatz: Eine UrlConnectionHttpClient Instanz teilen
Um den Ressourcen- und Speicherverbrauch für Ihre Anwendung zu senken, können Sie eine konfigurieren UrlConnectionHttpClient und sie von mehreren Service-Clients gemeinsam nutzen. Der HTTP-Verbindungspool wird gemeinsam genutzt, was die Ressourcennutzung senkt.
Anmerkung
Wenn eine UrlConnectionHttpClient 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 URLConnection basierter HTTP-Client konfiguriert, der von zwei Dienstclients verwendet wird. Die konfigurierte UrlConnectionHttpClient 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.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.ProxyConfiguration; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client; import java.net.URI; import java.time.Duration;
Code
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.create(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); urlHttpClient.close();
Wenn Sie das UrlConnectionHttpClient in Ihrer Anwendung verwenden, müssen Sie jedem Service-Client entweder eine URLConnectionHttpClient Instanz oder eine ApacheHttpClient Instanz mithilfe der httpClientBuilder Methode des Service Client Builders zur Verfügung stellen.
Eine Ausnahme tritt auf, wenn Ihr Programm mehrere Service-Clients verwendet und beide der folgenden Bedingungen zutreffen:
-
Ein Dienstclient ist für die Verwendung einer
UrlConnectionHttpClientInstanz konfiguriert -
Ein anderer Dienstclient verwendet den Standard,
ApacheHttpClientohne ihn explizit mit denhttpClientBuilder()MethodenhttpClient()oder zu erstellen
Die Ausnahme besagt, dass im Klassenpfad mehrere HTTP-Implementierungen gefunden wurden.
Der folgende Beispielcodeausschnitt führt zu einer Ausnahme.
// The dynamoDbClient uses the UrlConnectionHttpClient DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); // The s3Client below uses the ApacheHttpClient at runtime, without specifying it. // An SdkClientException is thrown with the message that multiple HTTP implementations were found on the classpath. S3Client s3Client = S3Client.create(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
Vermeiden Sie die Ausnahme, indem Sie das explizit S3Client mit einem konfigurieren. ApacheHttpClient
DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); S3Client s3Client = S3Client.builder() .httpClient(ApacheHttpClient.create()) // Explicitly build the ApacheHttpClient. .build(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
Anmerkung
Um das explizit zu erstellenApacheHttpClient, müssen Sie Ihrer Maven-Projektdatei eine Abhängigkeit vom apache-client Artefakt hinzufügen.
Beispiel für eine Proxy-Konfiguration
Der folgende Codeausschnitt verwendet den Proxykonfigurationsgenerator für den URL-Verbindungs-HTTP-Client
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.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 = UrlConnectionHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
Anmerkung
Der URLConnection basierte HTTP-Client unterstützt derzeit weder die HTTPS-Proxy-Systemeigenschaften noch die Umgebungsvariable HTTPS_PROXY.