Versi 4 (V4) AWS SDK untuk .NET telah dirilis!
Untuk informasi tentang mengubah perubahan dan memigrasikan aplikasi Anda, lihat topik https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html migrasi.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Percobaan ulang dan batas waktu
Ini AWS SDK untuk .NET memungkinkan Anda untuk mengonfigurasi jumlah percobaan ulang dan nilai batas waktu untuk permintaan HTTP ke AWS layanan. Jika nilai default untuk percobaan ulang dan batas waktu tidak sesuai untuk aplikasi Anda, Anda dapat menyesuaikannya dengan persyaratan spesifik Anda, tetapi penting untuk memahami bagaimana hal itu akan mempengaruhi perilaku aplikasi Anda.
Untuk menentukan nilai mana yang akan digunakan untuk percobaan ulang dan batas waktu, pertimbangkan hal berikut:
-
Bagaimana seharusnya AWS SDK untuk .NET dan aplikasi Anda merespons ketika konektivitas jaringan menurun atau AWS layanan tidak dapat dijangkau? Apakah Anda ingin panggilan gagal dengan cepat, atau apakah sesuai untuk panggilan untuk terus mencoba lagi atas nama Anda?
-
Apakah aplikasi Anda aplikasi atau situs web yang menghadap pengguna yang harus responsif, atau apakah itu pekerjaan pemrosesan latar belakang yang memiliki lebih banyak toleransi untuk peningkatan latensi?
-
Apakah aplikasi digunakan pada jaringan yang andal dengan latensi rendah, atau digunakan di lokasi terpencil dengan konektivitas yang tidak dapat diandalkan?
Pengaturan coba ulang dan batas waktu memengaruhi performa aplikasi yang dirasakan. Untuk rekomendasi terkait, lihatPraktik terbaik kinerja.
Percobaan ulang
Gambaran umum
Per AWS SDK untuk .NET mintaan dapat mencoba lagi yang gagal karena pelambatan sisi server atau koneksi terputus. Ada dua properti kelas konfigurasi layanan yang dapat Anda gunakan untuk menentukan perilaku coba ulang klien layanan. Kelas konfigurasi layanan mewarisi properti ini dari Amazon.Runtime.ClientConfig kelas abstrak Refer AWS SDK untuk .NET ensi API:
-
RetryModemenentukan salah satu dari tiga mode coba lagi, yang didefinisikan dalam Amazon.Runtime.RequestRetryMode enumerasi.Nilai default untuk aplikasi Anda dapat dikontrol dengan menggunakan variabel
AWS_RETRY_MODElingkungan atau pengaturan retry_mode dalam file konfigurasi bersama AWS .
-
MaxErrorRetrymenentukan jumlah percobaan ulang yang diizinkan di tingkat klien layanan; SDK mencoba ulang operasi jumlah yang ditentukan sebelum gagal dan melemparkan pengecualian.Nilai default untuk aplikasi Anda dapat dikontrol dengan menggunakan variabel
AWS_MAX_ATTEMPTSlingkungan atau pengaturan max_dalam file AWS konfigurasi bersama.
Deskripsi terperinci untuk properti ini dapat ditemukan di Amazon.Runtime.ClientConfig kelas abstrak Refer AWS SDK untuk .NET ensi API. Setiap nilai RetryMode sesuai secara default dengan nilai tertentuMaxErrorRetry, seperti yang ditunjukkan pada tabel berikut.
| RetryMode | Sesu MaxErrorRetry ai (Amazon DynamoDB) | Sesu MaxErrorRetry ai (semua lainnya) |
|---|---|---|
| Warisan | 10 | 4 |
| Standar | 10 | 2 |
| Adaptif (eksperimental) | 10 | 2 |
Perilaku
Saat aplikasi Anda dimulai
Saat aplikasi Anda dimulai, nilai default untuk RetryMode dan MaxErrorRetry dikonfigurasi oleh SDK. Nilai default ini digunakan saat Anda membuat klien layanan kecuali Anda menentukan nilai lain.
-
Jika properti tidak disetel di lingkungan Anda, default untuk
RetryModedikonfigurasi sebagai Legacy dan default untukMaxErrorRetrydikonfigurasi dengan nilai yang sesuai dari tabel sebelumnya. -
Jika mode coba lagi telah disetel di lingkungan Anda, nilai itu digunakan sebagai default untuk
RetryMode. Default untukMaxErrorRetrydikonfigurasi dengan nilai yang sesuai dari tabel sebelumnya kecuali nilai untuk kesalahan maksimum juga telah ditetapkan di lingkungan Anda (dijelaskan selanjutnya). -
Jika nilai untuk kesalahan maksimum telah ditetapkan di lingkungan Anda, nilai itu digunakan sebagai default untuk
MaxErrorRetry. Amazon DynamoDB adalah pengecualian untuk aturan ini; nilai DynamoDB default untuk selaluMaxErrorRetrymerupakan nilai dari tabel sebelumnya.
Saat aplikasi Anda berjalan
Saat Anda membuat klien layanan, Anda dapat menggunakan nilai default untuk RetryMode danMaxErrorRetry, seperti yang dijelaskan sebelumnya, atau Anda dapat menentukan nilai lain. Untuk menentukan nilai lain, buat dan sertakan objek konfigurasi layanan seperti AmazonDynamoDBConfig atau AmazonSQSConfig saat Anda membuat klien layanan.
Nilai-nilai ini tidak dapat diubah untuk klien layanan setelah dibuat.
Pertimbangan-pertimbangan
Ketika percobaan ulang terjadi, latensi permintaan Anda meningkat. Anda harus mengonfigurasi percobaan ulang berdasarkan batas aplikasi untuk total latensi permintaan dan tingkat kesalahan.
Waktu habis
Ini AWS SDK untuk .NET memungkinkan Anda untuk mengonfigurasi batas waktu permintaan di tingkat klien layanan dan per panggilan metode. Ada dua mekanisme untuk mengonfigurasi batas waktu, yang tercakup dalam bagian berikutnya:
-
Jika Anda menggunakan panggilan asinkron, Anda dapat menggunakan
CancellationTokenparameter metode. -
Jika Anda menggunakan panggilan sinkron di.NET Framework, Anda dapat menggunakan
ReadWriteTimeoutpropertiTimeoutdan dari Amazon.Runtime.ClientConfig kelas abstrak.
Menggunakan CancellationToken parameter untuk batas waktu
Ini AWS SDK untuk .NET memungkinkan Anda untuk mengkonfigurasi batas waktu permintaan pada panggilan asinkron dengan menggunakan parameter. CancellationToken Cuplikan kode berikut menunjukkan contoh. Kode melempar System.Threading.Tasks.TaskCanceledException jika permintaan tidak selesai dalam 10 detik.
string bucketName = "amzn-s3-demo-bucket"; string path = "pathToBucket"; using (var amazonS3Client = new AmazonS3Client(new AmazonS3Config())) { // Cancel request after 10 seconds CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(10000)); CancellationToken cancellationToken = cancellationTokenSource.Token; ListObjectsV2Request listRequestV2 = new() { BucketName = bucketName, Prefix = path, }; ListObjectsV2Response listResponseV2 = await amazonS3Client.ListObjectsV2Async(listRequestV2, cancellationToken); }
Menggunakan T imeout dan ReadWriteTimeout properti untuk batas waktu
catatan
Pro Timeout perti tidak memengaruhi panggilan asinkron. Jika Anda menggunakan panggilan asinkron, lihat Menggunakan CancellationToken parameter untuk batas waktu sebagai gantinya.
Ini AWS SDK untuk .NET memungkinkan Anda untuk mengonfigurasi nilai batas waktu permintaan dan batas read/write waktu soket di tingkat klien layanan. Nilai-nilai ini ditentukan dalam Timeout dan ReadWriteTimeout properti Amazon.Runtime.ClientConfig kelas abstrak. Nilai-nilai ini diteruskan sebagai ReadWriteTimeout properti Timeout dan dari HttpWebRequest Timeout ainya adalah 100 detik dan ReadWriteTimeout nilainya 300 detik.
Ketika jaringan Anda memiliki latensi tinggi, atau ada kondisi yang menyebabkan operasi dicoba ulang, menggunakan nilai batas waktu yang lama dan jumlah percobaan ulang yang tinggi dapat menyebabkan beberapa operasi SDK tampak tidak responsif.
catatan
Versi AWS SDK untuk .NET yang menargetkan pustaka kelas portabel (PCL) menggunakan HttpClient HttpWebRequest kelas, dan hanya mendukung properti T
Berikut ini adalah pengecualian untuk nilai batas waktu default. Nilai-nilai ini diganti ketika Anda secara eksplisit menetapkan nilai batas waktu.
-
TimeoutdanReadWriteTimeoutdiatur ke nilai maksimum jika metode yang dipanggil mengunggah aliran, seperti AmazonS3Client.PutObjectAsync (), (), AmazonS3Client.UploadPartAsync AmazonGlacierClient.UploadArchiveAsync () , dan seterusnya. -
Versi target .NET Framework ditetapkan
Timeoutdan nilai maksimumReadWriteTimeoutuntuk semua Amazons3Client dan objek. AWS SDK untuk .NET AmazonGlacierClient -
Versi AWS SDK untuk .NET yang menargetkan pustaka kelas portabel (PCL) dan.NET Core diatur
Timeoutke nilai maksimum untuk semua Amazons3 Client dan objek. AmazonGlacierClient
Contoh berikut menunjukkan cara menentukan mode coba ulang standar, maksimal 3 kali percobaan ulang, batas waktu 10 detik, dan batas read/write waktu 10 detik (jika berlaku). Konstruktor Amazons3Client diberi objek Amazons3config. https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Config.html
var s3Client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // NOTE: The following property is obsolete for // versions of the AWS SDK untuk .NET that target .NET Core. ReadWriteTimeout = TimeSpan.FromSeconds(10), RetryMode = RequestRetryMode.Standard, MaxErrorRetry = 3 });