Akademi C# · Pelajaran

Pengendalian Ralat dan Percubaan Semula

Kendalikan kegagalan dengan percubaan semula dan baris gilir surat mati.

Pelajaran 4 daripada 413 langkah

Pengendalian Ralat dan Percubaan Semula ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Kegagalan Itu Biasa

Pengguna mesej boleh gagal: ralat pangkalan data sementara, masa tamat sistem hiliran atau pepijat akibat data tidak sah. MassTransit menyediakan alat berlapis (percubaan semula, penghantaran semula dan baris gilir ralat) supaya kegagalan dikendalikan dengan baik dan mesej tidak hilang.

Percubaan Semula Segera

Untuk gangguan singkat, konfigurasikan percubaan semula supaya MassTransit memproses semula mesej beberapa kali secara berturutan sebelum berhenti mencuba.

cfg.ReceiveEndpoint("orders", e =>
{
    e.UseMessageRetry(r => r.Immediate(3));
    e.ConfigureConsumer<OrderConsumer>(context);
});

Percubaan Semula Berjeda Dan Exponential

Jarak antara percubaan semula membantu apabila pemulihan mengambil masa lebih lama. Gunakan selang atau peningkatan masa tunggu secara eksponen, serupa dengan Polly.

e.UseMessageRetry(r =>
    r.Exponential(5,
        minInterval: TimeSpan.FromSeconds(1),
        maxInterval: TimeSpan.FromMinutes(1),
        intervalDelta: TimeSpan.FromSeconds(2)));

Menapis Ralat Yang Perlu Dicuba Semula

Cuba semula hanya pengecualian sementara; jangan cuba semula pengecualian kekal seperti kegagalan pengesahan. Gunakan Handle dan Ignore untuk mengehadkan skop percubaan semula.

e.UseMessageRetry(r =>
{
    r.Handle<TimeoutException>();
    r.Ignore<ValidationException>();
    r.Immediate(3);
});

Percubaan Semula berbanding Penghantaran Semula

Percubaan semula mengekalkan mesej dalam memori dan memprosesnya semula dengan pantas. Penghantaran semula (percubaan semula tertunda atau peringkat kedua) memulangkan mesej kepada perantara untuk dihantar semula jauh kemudian, sekali gus membebaskan pengguna mesej buat sementara waktu.

e.UseDelayedRedelivery(r =>
    r.Intervals(TimeSpan.FromMinutes(5),
                TimeSpan.FromMinutes(15),
                TimeSpan.FromMinutes(30)));

Menggabungkan Kedua-dua Lapisan

Persediaan yang kukuh menggunakan percubaan semula segera untuk gangguan singkat dan penghantaran semula tertunda untuk gangguan yang lebih lama. Konfigurasikan penghantaran semula di luar percubaan semula supaya setiap cubaan penghantaran semula turut mendapat percubaan semula segera tersendiri.

e.UseDelayedRedelivery(r => r.Intervals(
    TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15)));
e.UseMessageRetry(r => r.Immediate(3));

Baris Gilir Ralat

Apabila semua percubaan semula dan penghantaran semula telah habis, MassTransit memindahkan mesej ke baris gilir ralat (bernama <queue>_error). Mesej itu disimpan bersama butiran pengecualian untuk disiasat dan tidak pernah dibuang secara senyap.

Kegagalan

Apabila berlaku kegagalan, MassTransit turut menerbitkan peristiwa Fault<T>. Perkhidmatan lain boleh menggunakan kegagalan untuk memberikan amaran, membuat pengelogan atau mencetuskan pampasan.

public class OrderFaultConsumer : IConsumer<Fault<OrderPlaced>>
{
    public Task Consume(ConsumeContext<Fault<OrderPlaced>> context)
    {
        // inspect context.Message.Exceptions
        return Task.CompletedTask;
    }
}

Idempoten Itu Penting

Oleh sebab percubaan semula dan penghantaran semula boleh memproses mesej lebih daripada sekali, pengguna mesej mestilah idempoten: mengendalikan mesej yang sama dua kali tidak boleh mengenakan bayaran dua kali atau menggandakan kerja. Gunakan id unik dan pemeriksaan pendua.

Memproses Semula Dari Baris Gilir Ralat

Selepas membaiki pepijat, anda boleh memindahkan mesej daripada baris gilir ralat kembali ke baris gilir asal untuk memprosesnya semula, lalu memulihkan kerja yang sebelum ini gagal.

Baris Gilir Surat Mati Dan Dilangkau

MassTransit turut menggunakan baris gilir dilangkau (_skipped) untuk mesej yang tidak dikehendaki oleh mana-mana pengguna mesej, membantu anda mengesan jenis mesej yang tersalah hala atau tidak dijangka dalam persekitaran pengeluaran.

Semakan Pantas

Uji pengendalian ralat dan percubaan semula.

Rumusan

MassTransit menggunakan pengendalian kegagalan berlapis: percubaan semula (segera/eksponen, dengan skop melalui Handle/Ignore) untuk gangguan singkat, penghantaran semula untuk gangguan yang lebih lama dan baris gilir ralat untuk mesej yang telah kehabisan percubaan, selain peristiwa Fault<T> untuk pemberian amaran. Oleh sebab mesej boleh diproses lebih daripada sekali, pastikan pengguna mesej idempoten dan proses semula mesej daripada baris gilir ralat selepas membaiki pepijat.

Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Pengendalian Ralat dan Percubaan Semula” percuma?

Ya — teks penuh “Pengendalian Ralat dan Percubaan Semula” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengendalian Ralat dan Percubaan Semula”?

Kendalikan kegagalan dengan percubaan semula dan baris gilir surat mati. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Pengendalian Ralat dan Percubaan Semula” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Konsep Pemesejan
  2. Menghasilkan dan Menggunakan Mesej
  3. Saga dan Aliran Kerja
  4. Pengendalian Ralat dan Percubaan Semula
← Kembali ke Akademi C#