Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan klien berbasis Apache HTTP
Klien layanan sinkron dalam AWS SDK for Java 2.x menggunakan HTTP klien berbasis Apache, secara default. ApacheHttpClientApacheHttpClient
didasarkan pada Apache HttpClient
Ini SDK juga menawarkan UrlConnectionHttpClientUrlConnectionHttpClient
, lihatKonfigurasikan HTTP klien URLConnection berbasis.
Untuk melihat set lengkap opsi konfigurasi yang tersedia untuk AndaApacheHttpClient
, lihat ApacheHttpClient.Builder dan ProxyConfiguration.Builder
Akses ApacheHttpClient
Dalam kebanyakan situasi, Anda menggunakan ApacheHttpClient
tanpa konfigurasi eksplisit. Anda mendeklarasikan klien layanan Anda dan SDK akan mengkonfigurasi ApacheHttpClient
dengan nilai standar untuk Anda.
Jika Anda ingin mengkonfigurasi ApacheHttpClient
atau menggunakannya secara eksplisit dengan beberapa klien layanan, Anda harus membuatnya tersedia untuk konfigurasi.
Tidak diperlukan konfigurasi
Ketika Anda mendeklarasikan ketergantungan pada klien layanan di Maven, SDK menambahkan ketergantungan runtime pada artefak. apache-client
Ini membuat ApacheHttpClient
kelas tersedia untuk kode Anda saat runtime, tetapi tidak pada waktu kompilasi. Jika Anda tidak mengonfigurasi HTTP klien berbasis Apache, Anda tidak perlu menentukan ketergantungan untuk itu.
Dalam XML cuplikan pom.xml
file Maven berikut, dependensi yang dideklarasikan dengan <artifactId>s3</artifactId>
secara otomatis membawa klien berbasis Apache. HTTP Anda tidak perlu mendeklarasikan dependensi khusus untuk itu.
<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> <dependencies> <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient--> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>
Dengan dependensi ini, Anda tidak dapat membuat perubahan HTTP konfigurasi eksplisit apa pun, karena ApacheHttpClient
pustaka hanya ada di classpath runtime.
Konfigurasi diperlukan
Untuk mengkonfigurasiApacheHttpClient
, Anda perlu menambahkan ketergantungan pada apache-client
perpustakaan pada waktu kompilasi.
Lihat contoh berikut dari file Maven untuk mengkonfigurasi pom.xml
file. ApacheHttpClient
<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> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- By adding the apache-client dependency, ApacheHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </dependency> </dependencies>
Gunakan dan konfigurasikan ApacheHttpClient
Anda dapat mengonfigurasi instance ApacheHttpClient
bersama dengan membangun klien layanan, atau Anda dapat mengonfigurasi satu instance untuk dibagikan di beberapa klien layanan.
Dengan salah satu pendekatan, Anda menggunakan ApacheHttpClient.Builder
untuk mengonfigurasi properti untuk klien berbasis ApacheHTTP.
Praktik terbaik: mendedikasikan sebuah ApacheHttpClient
instance untuk klien layanan
Jika Anda perlu mengonfigurasi instanceApacheHttpClient
, kami sarankan Anda membuat ApacheHttpClient
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 ApacheHttpClient
instance tidak ditutup saat tidak lagi diperlukan.
Contoh berikut membuat S3Client
dan mengkonfigurasi instance tertanam ApacheHttpClient
dengan maxConnections
dan connectionTimeout
nilai-nilai. HTTPInstance dibuat menggunakan httpClientBuilder
metodeS3Client.Builder
.
Impor
import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.s3.S3Client; import java.time.Duration;
Kode
S3Client s3Client = S3Client // Singleton: Use the s3Client for all requests. .builder() .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) ).build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close all service clients.
Pendekatan alternatif: bagikan ApacheHttpClient
contoh
Untuk membantu menjaga penggunaan sumber daya dan memori lebih rendah untuk aplikasi Anda, Anda dapat mengonfigurasi ApacheHttpClient
dan membagikannya di beberapa klien layanan. Kumpulan HTTP koneksi akan dibagikan, yang menurunkan penggunaan sumber daya.
catatan
Ketika sebuah ApacheHttpClient
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 berbasis Apache yang digunakan oleh dua klien layanan. ApacheHttpClient
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.http.SdkHttpClient; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;
Kode
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .maxConnections(100).build(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(apacheHttpClient).build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient).build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); apacheHttpClient.close(); // Explicitly close apacheHttpClient.
Contoh konfigurasi proxy
Cuplikan kode berikut menggunakan pembangun konfigurasi proxy untuk klien HTTP Apache
SdkHttpClient apacheHttpClient = ApacheHttpClient.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 = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
catatan
HTTPKlien Apache saat ini tidak mendukung properti sistem HTTPS proxy atau variabel PROXY lingkungan HTTPS _.