Konfigurasikan klien HTTP berbasis URLConnection - 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 klien HTTP berbasis URLConnection

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

UrlConnectionHttpClientBeban lebih cepat daripada klien HTTP 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 metode HTTP PATCH.

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

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

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 berikut dari pom.xml file menunjukkan dependensi yang diperlukan untuk menggunakan dan mengkonfigurasi klien HTTP.

<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> <!-- 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 klien HTTP berbasis URLConnection.

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 klien HTTP dikelola oleh SDK, 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 koneksi HTTP akan dibagikan, yang menurunkan penggunaan sumber daya.

catatan

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

Contoh berikut mengkonfigurasi klien HTTP berbasis URLConnection yang digunakan oleh dua klien layanan. UrlConnectionHttpClientInstance yang dikonfigurasi diteruskan ke httpClient metode masing-masing builder. Ketika klien layanan dan klien HTTP tidak lagi diperlukan, kode secara eksplisit menutupnya. Kode menutup klien HTTP 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 implementasi HTTP 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 HTTP koneksi URL.

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

Klien HTTP berbasis URLConnection saat ini tidak mendukung properti sistem proxy HTTPS atau variabel lingkungan HTTPS_PROXY.