DeadLetterMonitor adalah alat yang secara otomatis menangani, sesuai aturan khusus, beberapa kesalahan yang dapat terjadi di Arsitektur Pub/Sub.
Hal-hal seperti percobaan ulang setelah waktu henti yang tidak terduga pada konsumen, data referensi tidak disetel dengan benar di layanan tujuan, konfigurasi hilang, dll.
Proyek ini mengimplementasikan layanan Dead Letter Monitor sederhana yang mendengarkan semua antrian surat mati yang dikonfigurasi dan mengeksekusi pola Coba Ulang dan pola Pemutus Sirkuit.
Ini mengimplementasikan serangkaian aturan sederhana yang memungkinkan definisi pesan mana yang harus dicoba ulang, berapa kali, dan penundaan antar percobaan ulang. Semua pesan yang tidak dicoba ulang akan dihapus atau dipindahkan ke penyimpanan "Tempat Parkir" untuk diproses secara manual.
Semua pesan berhuruf mati yang diproses oleh mesin monitor ditangani oleh pengendali umum yang, sesuai dengan seperangkat aturan, akan membuang, mencoba lagi, atau mengirim pesan ke tempat parkir.
Semua pesan yang dikonfigurasi untuk dibuang hanya akan dihapus dari antrian.
Semua pesan yang dikonfigurasi untuk dicoba ulang akan dikirim ke bursa/topik asli, untuk diproses ulang oleh pelanggan asli. Percobaan ulang ini akan dijalankan menggunakan penundaan untuk memastikan bahwa masalah sementara pada infrastruktur telah diperbaiki.
Pesan tertunda : Untuk membuat penundaan, semua pesan yang akan dicoba lagi akan diposting pada delayed exchange and queue
, yaitu hanya antrian dengan pengaturan TTL.
Ketika TTL pesan tertunda kedaluwarsa, pesan akan secara otomatis dikirim ke Delayed Deadletter exchange and queue
yang memiliki pengendali khusus yang segera mengirimkan pesan ke antrian asli.
Semua konfigurasi disimpan dalam file appsettings.json
.
"DeadLetterMonitor": {
"MaxRetries": 2,
"DeadLetterQueues": "deadletter.queue",
"DelayedExchangeName": "delayed.exchange",
"DelayedQueueName": "delayed.queue",
"DelayedDeadLetterExchangeName": "delayed.deadletter.exchange",
"DelayedDeadLetterQueueName": "delayed.deadletter.queue",
"ParkingLotExchangeName": "parkinglot.exchange",
"ParkingLotQueueName": "parkinglot.queue",
"DelayValue": 10000,
"Rules": {
"Discard": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1",
"Retry": "work.exchange,Namespace.Abstractions.GenericEvent,rejected",
"Park": "work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1"
}
}
Milik | Keterangan |
---|---|
Percobaan Maks | Jumlah maksimum percobaan ulang per pesan |
Antrean Surat Mati | Nama antrian huruf mati, dipisahkan dengan koma |
NamaPertukaran Tertunda | Nama Pertukaran Tertunda - nama pertukaran untuk menangani pesan tertunda |
Nama Antrian Tertunda | Nama Antrian Tertunda - nama antrian untuk menerima pesan tertunda |
NamaPertukaran Surat Mati Tertunda | Nama pertukaran surat mati tertunda - nama pertukaran untuk menangani pesan tertunda |
Nama Antrian Surat Mati Tertunda | Nama antrian surat mati tertunda - nama antrian untuk menerima pesan tertunda |
Nilai Penundaan | Waktu tunda dalam detik sebelum mengirim pesan kembali untuk dicoba lagi. |
NamaPertukaran Tempat Parkir | Pertukaran nama tempat parkir |
Nama Antrian Tempat Parkir | Nama antrian tempat parkir |
Aturan | Daftar aturan yang harus diterapkan di mesin monitor. Setiap aturan diterapkan menggunakan fliter yang disusun oleh daftar OriginalExchange MessageType dan DeathReason . Daftar filter dipisahkan dengan koma. (mis. work.exchange1,Namespace.Abstractions.GenericEvent1,rejected1 - filter ini akan menerapkan aturan ke pesan dari Exchange work.exchange1 dengan Tipe Pesan Namespace.Abstractions dan DeathReason dari rejected1 ) |
Aturan: Buang | Daftar filter pesan dari pesan yang akan dibuang. Pesan yang cocok dengan kriteria filter ini akan dihapus secara otomatis. |
Aturan: Coba lagi | Daftar filter pesan dari pesan yang akan dicoba ulang hingga MaxRetries tercapai. Pesan yang cocok dengan kriteria filter ini dikirim untuk dicoba lagi. |
Aturan: Parkir | Daftar filter pesan dari pesan yang akan diparkir secara langsung. Pesan yang cocok dengan kriteria filter ini dikirim ke tempat parkir. |
Proyek saat ini mendukung Azure Service Bus dan RabbitMQ, diimplementasikan di bawah namespace *.Connectors
, untuk menentukan konektor mana yang akan digunakan, dalam file AppSettings, atur opsi yang sesuai untuk MessageBus ( AzureServiceBus
atau RabbitMQ
) dan pengaturan terkait.
Proyek ini menyambut baik kontribusi dan saran.
Silakan lihat panduan kontribusi kami untuk instruksi lengkap tentang bagaimana Anda dapat berkontribusi pada DeadLetterMonitor.
Proyek ini telah mengadopsi Kode Etik Sumber Terbuka Microsoft. Untuk informasi lebih lanjut lihat FAQ Pedoman Perilaku atau hubungi [email protected] jika ada pertanyaan atau komentar tambahan.