Konfigurasikan HTTP klien URLConnection berbasis - AWS SDK for Java 2.x

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan HTTP klien URLConnection berbasis

Ini AWS SDK for Java 2.x menawarkan UrlConnectionHttpClient HTTP klien yang lebih ringan dibandingkan dengan default. ApacheHttpClient UrlConnectionHttpClientIni didasarkan pada JavaURLConnection.

UrlConnectionHttpClientBeban lebih cepat daripada HTTP klien berbasis Apache, tetapi memiliki lebih sedikit fitur. Karena memuat lebih cepat, ini adalah solusi yang baik untuk AWS Lambda fungsi Java.

Ini UrlConnectionHttpClient memiliki beberapa opsi yang dapat dikonfigurasi yang dapat Anda akses.

catatan

UrlConnectionHttpClientTidak mendukung HTTP PATCH metode ini.

Beberapa AWS API operasi membutuhkan PATCH permintaan. Nama-nama operasi itu biasanya dimulai denganUpdate*. Berikut ini adalah beberapa contoh.

Jika Anda mungkin menggunakanUrlConnectionHttpClient, pertama lihat API Referensi untuk Layanan AWS yang Anda gunakan. Periksa untuk melihat apakah operasi yang Anda butuhkan menggunakan PATCH operasi.

Akses UrlConnectionHttpClient

Untuk mengkonfigurasi dan menggunakanUrlConnectionHttpClient, Anda mendeklarasikan ketergantungan pada artefak url-connection-client Maven dalam file Anda. pom.xml

Berbeda denganApacheHttpClient, tidak UrlConnectionHttpClient secara otomatis ditambahkan ke proyek Anda, jadi penggunaan harus secara khusus mendeklarasikannya.

Contoh pom.xml file berikut menunjukkan dependensi yang diperlukan untuk menggunakan dan mengkonfigurasi klien. HTTP

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

Gunakan dan konfigurasikan UrlConnectionHttpClient

Anda dapat mengonfigurasi instance UrlConnectionHttpClient bersama dengan membangun klien layanan, atau Anda dapat mengonfigurasi satu instance untuk dibagikan di beberapa klien layanan.

Dengan salah satu pendekatan, Anda menggunakan UrlConnectionHttpClient.Builder untuk mengonfigurasi properti untuk HTTP klien URLConnection berbasis.

Praktik terbaik: mendedikasikan sebuah UrlConnectionHttpClient instance untuk klien layanan

Jika Anda perlu mengonfigurasi instanceUrlConnectionHttpClient, kami sarankan Anda membuat UrlConnectionHttpClient instance khusus. Anda dapat melakukannya dengan menggunakan httpClientBuilder metode pembangun klien layanan. Dengan cara ini, siklus hidup HTTP klien dikelola olehSDK, yang membantu menghindari potensi kebocoran memori jika UrlConnectionHttpClient instance tidak ditutup saat tidak lagi diperlukan.

Contoh berikut membuat S3Client dan mengkonfigurasi instance tertanam UrlConnectionHttpClient dengan socketTimeout dan proxyConfiguration nilai-nilai. proxyConfigurationMetode ini mengambil ekspresi Java lambda tipe Consumer<ProxyConfiguration.Builder>.

Impor

import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.net.URI; import java.time.Duration;

Kode

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

Pendekatan alternatif: bagikan UrlConnectionHttpClient contoh

Untuk membantu menjaga penggunaan sumber daya dan memori lebih rendah untuk aplikasi Anda, Anda dapat mengonfigurasi UrlConnectionHttpClient dan membagikannya di beberapa klien layanan. Kumpulan HTTP koneksi akan dibagikan, yang menurunkan penggunaan sumber daya.

catatan

Ketika sebuah UrlConnectionHttpClient instance dibagikan, Anda harus menutupnya ketika sudah siap untuk dibuang. Itu tidak SDK akan menutup instance ketika klien layanan ditutup.

Contoh berikut mengkonfigurasi HTTP klien URLConnection berbasis yang digunakan oleh dua klien layanan. UrlConnectionHttpClientInstance yang dikonfigurasi diteruskan ke httpClient metode masing-masing builder. Ketika klien layanan dan klien tidak lagi diperlukan, kode secara eksplisit menutupnya. HTTP Kode menutup HTTP klien terakhir.

Impor

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;

Kode

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();

Ketika Anda menggunakan UrlConnectionHttpClient dalam aplikasi Anda, Anda harus menyediakan setiap klien layanan dengan URLConnectionHttpClient instance atau ApacheHttpClient instance menggunakan httpClientBuilder metode pembuat klien layanan.

Pengecualian terjadi jika program Anda menggunakan beberapa klien layanan dan kedua hal berikut ini benar:

  • Satu klien layanan dikonfigurasi untuk menggunakan UrlConnectionHttpClient instance

  • Klien layanan lain menggunakan default ApacheHttpClient tanpa secara eksplisit membangunnya dengan metode or httpClient() httpClientBuilder()

Pengecualian akan menyatakan bahwa beberapa HTTP implementasi ditemukan di classpath.

Contoh cuplikan kode berikut mengarah ke pengecualian.

// 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();

Hindari pengecualian dengan secara eksplisit mengonfigurasi dengan file. S3Client 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();
catatan

Untuk secara eksplisit membuatApacheHttpClient, Anda harus menambahkan ketergantungan pada apache-client artefak dalam file proyek Maven Anda.

Contoh konfigurasi proxy

Cuplikan kode berikut menggunakan pembangun konfigurasi proxy untuk klien URL koneksi HTTP.

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();

Properti sistem Java yang setara untuk konfigurasi proxy ditampilkan dalam cuplikan baris perintah berikut.

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

Pengaturan setara yang menggunakan variabel lingkungan adalah:

// 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
catatan

HTTPKlien URLConnection berbasis saat ini tidak mendukung properti sistem HTTPS proxy atau variabel PROXY lingkungan HTTPS _.