Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan klien HTTP URLConnection berbasis
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
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.
-
Beberapa
Update*operasi di AWS Security Hub API dan juga BatchUpdateFindingsoperasi -
Semua
Update*operasi API Amazon API Gateway
Jika Anda mungkin menggunakanUrlConnectionHttpClient, pertama-tama lihat Referensi API untuk Layanan AWS 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.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
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 URLConnection berbasis 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
UrlConnectionHttpClientinstance -
Klien layanan lain menggunakan default
ApacheHttpClienttanpa secara eksplisit membangunnya dengan metode orhttpClient()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 URLConnection berbasis saat ini tidak mendukung properti sistem proxy HTTPS atau variabel lingkungan HTTPS_PROXY.