Versi 4 (V4) dari AWS SDK untuk .NET telah dirilis!
Untuk mulai menggunakan versi baru SDK, lihat Panduan Pengembang AWS SDK untuk .NET (V4), terutama topik untuk Migrasi ke versi 4.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mencoba lagi dan batas waktu
AWS SDK untuk .NET Ini 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 memengaruhi 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 pantas untuk panggilan untuk terus mencoba lagi atas nama Anda?
-
Apakah aplikasi Anda merupakan aplikasi atau situs web yang harus responsif, atau apakah itu pekerjaan pemrosesan latar belakang yang memiliki toleransi lebih untuk peningkatan latensi?
-
Apakah aplikasi digunakan pada jaringan yang andal dengan latensi rendah, atau apakah itu digunakan di lokasi terpencil dengan konektivitas yang tidak dapat diandalkan?
Percobaan ulang
Gambaran Umum
Permintaan AWS SDK untuk .NET dapat mencoba ulang yang gagal karena pelambatan sisi server atau koneksi terputus. Ada dua properti kelas konfigurasi layanan yang dapat Anda gunakan untuk menentukan perilaku coba lagi dari klien layanan. Kelas konfigurasi layanan mewarisi properti ini dari Amazon.Runtime abstrak. ClientConfigkelas Referensi AWS SDK untuk .NET API:
-
RetryModemenentukan salah satu dari tiga mode coba lagi, yang didefinisikan dalam Amazon.Runtime. RequestRetryModepencacahan.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 beberapa kali yang ditentukan sebelum gagal dan melempar pengecualian.Nilai default untuk aplikasi Anda dapat dikontrol dengan menggunakan variabel
AWS_MAX_ATTEMPTSlingkungan atau pengaturan max_attempts dalam file AWS konfigurasi bersama.
Deskripsi terperinci untuk properti ini dapat ditemukan di Amazon.Runtime abstrak. ClientConfigkelas Referensi AWS SDK untuk .NET API. Setiap nilai RetryMode sesuai secara default dengan nilai tertentuMaxErrorRetry, seperti yang ditunjukkan pada tabel berikut.
| RetryMode | Sesuai MaxErrorRetry (Amazon DynamoDB) | Sesuai MaxErrorRetry (semua yang lain) |
|---|---|---|
| Warisan | 10 | 4 |
| Standar | 10 | 2 |
| Adaptif (eksperimental) | 10 | 2 |
Perilaku
Saat aplikasi Anda dimulai
Ketika 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 lainnya.
-
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 tersebut 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 tersebut digunakan sebagai default untuk
MaxErrorRetry. Amazon DynamoDB adalah pengecualian untuk aturan ini; nilai default DynamoDBMaxErrorRetryuntuk selalu nilai dari tabel sebelumnya.
Saat aplikasi Anda berjalan
Saat membuat klien layanan, Anda dapat menggunakan nilai default untuk RetryMode danMaxErrorRetry, seperti yang dijelaskan sebelumnya, atau Anda dapat menentukan nilai lainnya. Untuk menentukan nilai lain, buat dan sertakan objek konfigurasi layanan seperti AmazonDynamoDBConfigatau Amazon SQSConfig 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 latensi permintaan total dan tingkat kesalahan.
Timeout
AWS SDK untuk .NET Ini 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 selanjutnya:
-
Jika Anda menggunakan panggilan asinkron, Anda dapat menggunakan
CancellationTokenparameter metode ini. -
Jika Anda menggunakan panggilan sinkron di.NET Framework, Anda dapat menggunakan
TimeoutdanReadWriteTimeoutproperti Amazon.Runtime abstrak. ClientConfigkelas.
Menggunakan CancellationToken parameter untuk batas waktu
AWS SDK untuk .NET Ini memungkinkan Anda untuk mengonfigurasi 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 Timeout dan ReadWriteTimeout properti untuk batas waktu
catatan
TimeoutProperti tidak memengaruhi panggilan asinkron. Jika Anda menggunakan panggilan asinkron, lihat sebagai gantinya. Menggunakan CancellationToken parameter untuk batas waktu
AWS SDK untuk .NET Ini memungkinkan Anda untuk mengonfigurasi batas waktu permintaan dan nilai batas waktu baca/tulis soket di tingkat klien layanan. Nilai-nilai ini ditentukan dalam Timeout dan ReadWriteTimeout properti abstrak Amazon.Runtime. ClientConfigkelas. Nilai-nilai ini diteruskan sebagai Timeout dan ReadWriteTimeout properti dari HttpWebRequestTimeout nilainya 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 perpustakaan kelas portabel (PCL) menggunakan HttpClientHttpWebRequest kelas, dan hanya mendukung properti Timeout
Berikut ini adalah pengecualian untuk nilai batas waktu default. Nilai-nilai ini diganti ketika Anda secara eksplisit menetapkan nilai batas waktu.
-
TimeoutdanReadWriteTimeoutdisetel ke nilai maksimum jika metode yang dipanggil mengunggah aliran, seperti Amazons3Client. PutObjectAsync(), Amazons3Client. UploadPartAsync(), AmazonGlacierClient. UploadArchiveAsync(), dan sebagainya. -
Versi dari target AWS SDK untuk .NET yang ditetapkan .NET Framework
TimeoutdanReadWriteTimeoutke nilai maksimum untuk semua Amazons3Client dan objek. AmazonGlacierClient -
Versi AWS SDK untuk .NET yang menargetkan perpustakaan kelas portabel (PCL) dan .NET Core diatur
Timeoutke nilai maksimum untuk semua Amazons3Client dan objek. AmazonGlacierClient
Contoh berikut menunjukkan cara menentukan mode coba ulang Standar, maksimal 3 percobaan ulang, batas waktu 10 detik, dan batas waktu baca/tulis 10 detik (jika ada). Konstruktor Amazons3Client diberikan objek Amazons3config.
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 });