Bir tüketici (consumer), bir mesajı maksimum yeniden deneme sayısına kadar işlemeyi başaramadığında ApsaraMQ for RocketMQ bu mesajı bir dead-letter queue'ya taşır. Dead-letter mesajlar genellikle bir tüketici hatasını, aşağı akış bağımlılıklarındaki arızaları veya uyumsuz mesaj biçimlerini gösterir. Kök nedeni düzelttikten sonra mesajları yeniden işleme için konsoldan yeniden gönderin. Sorunu hemen çözemezseniz verilerin kaybolmasını önlemek amacıyla 3 günlük saklama süresi dolmadan önce mesajları dışa aktarın. Yeniden deneme davranışı hakkında daha fazla bilgi için bkz. Message retry.
Temel özellikler
| Özellik | Ayrıntılar |
|---|---|
| Kapsam | Her dead-letter queue bir consumer group'a aittir; tek bir tüketici örneğine ait değildir. Aynı gruptan gelen tüm dead-letter mesajlar, kaynak konu (topic) ne olursa olsun aynı kuyrukta toplanır. |
| Oluşturma | Talep üzerine oluşturulur. Bir grup dead-letter mesaj üretmediği sürece o grup için dead-letter queue bulunmaz. |
| Saklama | Dead-letter mesajlar 3 gün sonra (normal mesajlarla aynı saklama süresi) süresi dolup otomatik olarak silinir. |
| Normal teslimat | Dead-letter mesajlar normal teslimat yoluyla tüketilemez. Sorunu çözdükten sonra bunları konsoldan yeniden gönderin. |
Dead-letter mesajlarını tanılama
Mesajlar bir dead-letter queue'da göründüğünde yeniden göndermeden önce kök nedeni araştırın:
Mesaj işleme sırasında oluşan özel durumlar veya hatalar için tüketici günlüklerini kontrol edin.
Mesaj içeriğini inceleyin -- Mesajı ID ile sorgulayın; bozuk veya beklenmeyen verileri tespit etmek için gövdesini ve özelliklerini gözden geçirin.
Aşağı akış bağımlılıklarını doğrulayın -- Tüketicinin güvendiği veritabanlarının, API'lerin veya diğer hizmetlerin hata oluştuğu anda kullanılabilir olduğunu teyit edin.
Tüketici zaman aşımı ayarlarını gözden geçirin -- Tüketicinin, mesajların zaman aşımına uğramadan ve yeniden denemeyi tetiklemeden önce işlenmesi için yeterli zamana sahip olduğundan emin olun.
Dead-letter mesajlarını sorgulama
ApsaraMQ for RocketMQ, konsolda iki sorgu yöntemi sunar:
| Yöntem | Girdi | Eşleşme türü | En uygun olduğu durum |
|---|---|---|---|
| Group ID'ye göre | Group ID + zaman aralığı | Aralık eşleşmesi | Belirli bir zaman penceresindeki tüm dead-letter mesajlara göz atma |
| Message ID'ye göre | Group ID + message ID | Tam eşleşme | Belirli bir mesajı bulma |
Adımlar
ApsaraMQ for RocketMQ konsolunda oturum açın. Sol gezinme bölmesinde Instances seçeneğine tıklayın.
Üst gezinme çubuğunda bir bölge seçin; örneğin China (Hangzhou). Instances sayfasında yönetmek istediğiniz örneğin adına tıklayın.
Sol gezinme bölmesinde Dead-letter Queues seçeneğine tıklayın.
-
Dead-letter Queues sayfasında bir sorgu yöntemi seçin:
-
Query by Group ID -- Eşleşen tüm dead-letter mesajları almak için bir group ID ve zaman aralığı belirtin.
NotDead-letter mesajın oluşma zamanı, mesajın ilk gönderildiği an değil; tüm yeniden denemeler tükendikten sonra dead-letter queue'ya girdiği andır.
Query by Message ID -- Belirli bir mesajı bulmak için bir group ID ve message ID belirtin.
-
Dead-letter mesajlarını yeniden gönderme
Kök nedeni belirleyip düzelttikten sonra dead-letter mesajları konsoldan yeniden göndererek tüketimi yeniden deneyin.
Sıralı mesajlar (ordered messages) bir dead-letter queue'dan yeniden gönderilemez. Bunları dışa aktarıp manuel olarak işleyin.
Yeniden gönderilen mesajlar dead-letter queue'da saklanmaya devam eder ve saklama süresi dolduğunda otomatik olarak silinir.
Tek bir mesajı yeniden gönderme
Yukarıdaki yöntemlerden birini kullanarak dead-letter mesajını sorgulayın.
Mesaj listesinde hedef mesajı bulun ve Actions sütunundaki More seçeneğine tıklayın.
Resend seçeneğini belirleyin.
Birden çok mesajı yeniden gönderme
Dead-letter mesajlarını group ID'ye göre sorgulayın.
Yeniden göndermek istediğiniz mesajları seçin.
Batch Resend Messages seçeneğine tıklayın.
Dead-letter mesajlarını dışa aktarma
3 günlük saklama süresi dolmadan önce mesajları korumak üzere dışa aktarın. Dışa aktarılan dosyalar CSV formatındadır.
Tek bir mesajı dışa aktarma
Yukarıdaki yöntemlerden birini kullanarak dead-letter mesajını sorgulayın.
Mesaj listesinde hedef mesajı bulun ve Actions sütunundaki More seçeneğine tıklayın.
Export Message seçeneğini belirleyin.
Birden çok mesajı dışa aktarma
Dead-letter mesajlarını group ID'ye göre sorgulayın.
Dışa aktarmak istediğiniz mesajları seçin.
Batch Export Messages seçeneğine tıklayın.
Dışa aktarılan alanlar
| Alan | Açıklama |
|---|---|
| instanceId | Örnek kimliği |
| topic | Mesajın ait olduğu konu |
| msgId | Mesaj kimliği |
| bornHost | Mesajı üreten üreticinin URL'si |
| bornTimestamp | Mesajın üretildiği zaman damgası |
| storeTimestamp | Broker'ın mesajı depoladığı zaman damgası |
| reconsumeTimes | Başarısız olan tüketim denemesi sayısı |
| properties | JSON formatındaki mesaj nitelikleri |
| body | Base64 kodlamalı mesaj gövdesi |
| bodyCRC | Mesaj gövdesinin CRC (Cyclic Redundancy Check) değeri |
Sonraki adımlar
Message retry -- Yeniden deneme aralıklarının ve maksimum yeniden deneme sayısının bir mesajın ne zaman dead-letter mesaj haline geldiğini nasıl belirlediğini öğrenin.