Bir mesajın tüketimi başarısız olursa mesaj yeniden deneme işlemi otomatik olarak tetiklenir. Maksimum yeniden deneme sayısına ulaşıldıktan sonra mesaj hala tüketilemiyorsa dead-letter message haline gelir. ApsaraMQ for RocketMQ bu dead-letter mesajları, sonraki iş kurtarma veya geriye dönük analizler için belirli bir konuda saklamanıza olanak tanır. Bu konu, dead-letter mesajlar için senaryoları, dead-letter ilkelerini, sınırlamaları, yapılandırma yöntemlerini ve kullanım notlarını açıklar.
Senaryolar
-
Tipik dead-letter mesaj işleme senaryosu
Mesaj yeniden denemeleri başarısız olduktan sonra dead-letter mesajları belirlenmiş bir dead-letter konusuna kaydedin. Hata yolu işlemeyi veya dead-letter analizini etkinleştirmek için bu mesajları tüketip işlemek üzere ayrı bir consumer group oluşturun.
-
Dead-letter mesajların tipik yanlış kullanımı
Dead-letter mesajları birden çok katman üzerinden yönlendirir veya orijinal konuya geri dökerseniz yeniden deneme döngüsüne tekrar girebilirler. Bu durum çığ etkisini tetikleyebilir.
Dead-letter policy
Mesajların dead letter haline gelme durumu
Bir mesaj maksimum yeniden deneme sayısına ulaştıktan sonra başarılı bir şekilde tüketilmezse teslim edilmeyi durdurur ve dead-letter message haline gelir.

Dead-letter message saklama kuralları
ApsaraMQ for RocketMQ Varsayılan olarak dead-letter mesajlar saklanmaz ve dead-letter durumuna girdikten sonra silinir.
Konsolda dead-letter message saklamayı etkinleştirebilirsiniz. Etkinleştirildiğinde dead-letter mesajlar dead-letter topic olarak bilinen belirli bir konuda depolanır. Ayrıntılar için bkz. Dead-letter message saklama kurallarını yapılandırma.
Dead-letter mesajlar yeni mesajlar olarak dead-letter topic içinde saklanır. Nitelikleri aşağıdaki gibi değişir:
Message ID: Dead-letter message dead-letter topic içinde saklandığında yeni bir message ID oluşturulur.
Kullanıcı tanımlı nitelikler, mesaj gövdesi ve diğer kullanıcı tarafından sağlanan bilgiler değişmeden kalır.
Dead-letter mesajların saklama süresi, dead-letter topic içine girdikleri andan itibaren sayılmaya başlar. Örneğin, bir mesaj sunucuya 13:00:00'da gönderilir ve iki saat sonra (15:00:00'da) tüketim ve yeniden deneme başarısız olursa saklama süresi 15:00:00'da başlar.
Sınırlamalar
Dead-letter topic normal mesaj konusu veya sıralı mesaj konusu olmalıdır. İşlemsel mesaj konuları ve zamanlanmış mesaj konuları dead-letter topic olarak kullanılamaz.
Orijinal mesajın konusunu dead-letter topic olarak kullanamazsınız (döngüsel yeniden denemeleri ve çığ etkisini önlemek için). Sistem aktarım sırasında dead-letter topic ile orijinal konunun eşleştiğini algılarsa mesaj silinir.
Farklı konulardan gelen dead-letter mesajlar aynı dead-letter topic içinde saklanabilir.
Bir consumer group silmek ilişkili dead-letter topic öğesini silmez.
Bir konu dead-letter policy tarafından referans alınıyorsa konuyu silmeden önce bu ilkeyi kaldırmanız gerekir.
Dead-letter message saklama kurallarını yapılandırma
Dead-letter mesajların saklanıp saklanmayacağını ApsaraMQ for RocketMQ konsolu üzerinden yapılandırabilirsiniz.
Bu ayara erişmek için:
Instances sayfasında hedef örnek adını tıklayın.
Sol gezinme bölmesinde Groups seçeneğini tıklayın. Groups sayfasında Create Group seçeneğini tıklayın.
Create Group iletişim kutusunda Advanced Settings bölümünü genişleterek Consumption Retry Policy (varsayılan: üstel geri çekilme), Maximum Retry Count (varsayılan: 16) ve Retain Dead-letter Messages geçiş anahtarını yapılandırın. Bu geçiş anahtarı kapalıysa yeniden deneme sınırını aşan mesajlar silinir.
Dead-letter mesajlar için gözlemlenebilirlik ölçümleri
Ölçüm açıklamaları
|
Ölçüm türü |
Ölçüm |
|
rocketmq_send_to_dlq_messages: Dakika başına dead-letter durumuna giren mesaj sayısı |
|
|
Ölçümlerin kullanımı
ApsaraMQ for RocketMQ dead-letter mesajlar için uyarı yapılandırmayı destekler; bu sayede iş geribildiriminden önce anormallikleri tespit edebilir ve pano ölçümlerini inceleyerek kaynaklarını daha fazla belirleyebilirsiniz.
-
Senaryo 1: Dakika başına dead-letter durumuna giren mesaj sayısını görüntüleme
Dashboard içinde Messages entering dead-letter status per minute göstergesini kontrol edin. Ayrıca Cloud Monitor kullanarak Messages entering dead-letter status per minute (GroupId & Topic) için bir uyarı ayarlayabilirsiniz.
-
Senaryo 2: Kaç dead-letter mesajın işlenmemiş olarak kaldığını kontrol etme
Dead-letter mesajlar belirlenmiş bir konuda depolandıktan sonra bu dead-letter topic için Dashboard içindeki Consumption backlog ölçümünü görüntüleyin. Alternatif olarak Cloud Monitor kullanarak Message backlog (GroupId & Topic) için bir uyarı oluşturabilirsiniz.
En iyi uygulamalar
Tüketicilerin orijinal konu bilgilerini nasıl alabileceği
-
Seçenek 1: Her dead-letter topic öğesini orijinal konusuyla birebir eşleştirin.
Örneğin, orijinal konu testTopic ise dead-letter konusunu DLQ-testTopic olarak adlandırın.
-
Seçenek 2: Orijinal konu adını özel bir mesaj niteliğine gömün. Örnek:
messageBuilder.addProperty("originalTopic","testTopic")
Dead-letter işlemini ana iş mantığından ayırma
Dead-letter mesajlar normal iş akışlarında yeniden denemelerden sonra bile başarısız olan mesajlardır. Düzenli operasyonları aksatmamak için bunları ayrı olarak işleyin.
Dead-letter topic orijinal mesaj konusundan farklı olmalıdır. Orijinal konunun yeniden kullanılması dead-letter mesajların tüketim döngüsüne tekrar girmesine neden olabilir; bu da normal consumer group'ları engelleyerek çığ etkisini tetikler.
Ana üretim akışınızdaki consumer group'ları dead-letter mesajları tüketmek için kullanmayın. Bu durum normal mesaj işlemeyi engelleyebilir.