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
UrlConnectionHttpClient
Ini didasarkan pada JavaURLConnection
.
UrlConnectionHttpClient
Beban 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
catatan
UrlConnectionHttpClient
Tidak mendukung HTTP PATCH metode ini.
Beberapa AWS API operasi membutuhkan PATCH permintaan. Nama-nama operasi itu biasanya dimulai denganUpdate*
. Berikut ini adalah beberapa contoh.
-
Beberapa
Update*
operasi dalam AWS Security Hub API dan juga BatchUpdateFindingsoperasi -
Semua API
Update*
operasi Amazon API Gateway -
Beberapa
Update*
operasi di Amazon WorkDocs API
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
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. proxyConfiguration
Metode 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. UrlConnectionHttpClient
Instance 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 orhttpClient()
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 _.