Teslim edilemeyen iletiler sırası nedir?

Teslim edilemeyen iletiler sırası (DLQ), bir yazılım sisteminin hatalar nedeniyle işleyemediği mesajları geçici olarak depolayan özel bir mesaj kuyruğu türüdür. Mesaj kuyrukları, dağıtılmış bir sistemde zaman uyumsuz iletişimi destekleyen yazılım bileşenleridir. Bunlar yazılım hizmetleri arasında istediğiniz hacim fark etmeksizin mesaj göndermenize izin verir ve mesaj alıcısının her zaman müsait olmasını gerektirmez. Teslim edilemeyen iletiler sırası, özellikle de hedefi olmayan veya amaçlanan alıcı tarafından işlenemeyen hatalı mesajları depolar.

Teslim edilemeyen iletiler sıraları neden önemlidir?

Teslim edilemeyen iletiler sıraları (DLQ) ve normal mesaj kuyrukları birlikte bulunmaktadır. Hatalı ve başarısız mesajlar için geçici depolama görevi görürler. DLQ'lar, kaynak sırasının işlenmemiş mesajlarla dolmasını önler.

Örneğin, normal bir mesaj kuyruğu ve DLQ'ya sahip bir yazılımı düşünün. Yazılım, bir hedefe göndermeyi planladığı mesajları saklamak için normal kuyruğu kullanır. Alıcı gönderilen mesajları yanıtlayamaz veya işleyemezse yazılım, bu mesajları teslim edilemeyen iletiler sırasına taşır.

Mesajlar DLQ işlem hattına taşınırken karşılaşılabilecek iki olası neden vardır: hatalı mesaj içeriği ve alıcının sistemindeki değişiklikler.

Hatalı mesaj içeriği

İletilen mesaj hatalıysa mesaj DLQ'ya taşınır. Donanım, yazılım ve ağ koşulları, gönderilen verileri bozabilir. Örneğin donanım müdahalesi, iletim sırasında bazı bilgileri biraz değiştirir. Beklenmeyen veri bozulması, alıcının mesajı reddetmesine veya görmezden gelmesine neden olabilir.

Alıcının sistemindeki değişiklikler

Alıcı yazılımda gönderenin farkında olmadığı değişiklikler gerçekleştiyse mesajlar DLQ'ya aktarılabilir. Örneğin CUST_ID_005 için bir mesaj göndererek müşterinin bilgilerini güncellemeyi deneyebilirsiniz. Ancak alıcı, müşteriyi sistemin veri tabanından çıkardığı için gelen mesajı işleyemez.

Teslim edilemeyen iletiler sırasının avantajları nelerdir?

Şimdi, teslim edilemeyen iletiler sırası (DLQ) avantajlarından bahsedeceğiz.

Daha az iletişim maliyetleri

Normal veya standart mesaj kuyrukları, saklama süresi sona erene kadar mesajları işlemeye devam eder. Bu, mesajların devamlı olarak işlenmesine yardımcı olur ve kuyruğunuzun engellenme olasılığını en aza indirir.

Ancak sisteminiz binlerce mesajı işliyorsa çok sayıda hata mesajı, iletişim genel giderlerini artırır ve iletişim sistemine yük bindirir. Gönderilemeyen mesajları süreleri dolana kadar işlemeye çalışmak yerine birkaç işleme denemesinden sonra bu mesajları bir teslim edilemeyen iletiler sırasına aktarmak daha iyidir. 

Geliştirilmiş sorun giderme

Hatalı mesajları DLQ'ya taşırsanız geliştiricilerinizin hataların nedenlerini tespit etmeye odaklanmalarını sağlarsınız. Geliştiricileriniz, bu sayede alıcının mesajları neden işleyemediğini araştırabilirler, sorunları düzeltebilirler ve mesajları teslim etmek için yeni denemeler yapabilirler.

Örneğin bir bankacılık yazılımı, onay için bankanın arka uç sistemine günlük olarak binlerce kredi kartı başvurusu gönderebilir. Arka uç sistemi, bu noktadan uygulamaları alır ancak eksik bilgi nedeniyle hepsini işleyemez. Yazılım, sonsuz sayıda deneme yapmak yerine BT ekibi sorunu çözene kadar mesajları DLQ'ya taşır. Bu, sistemin kalan mesajları performans sorunları olmadan işlemesine ve teslim etmesine olanak tanır. 

Ne zaman teslim edilemeyen iletiler sırası kullanmalısınız?

Sisteminizde aşağıdaki sorunlar varsa teslim edilemeyen iletiler sırası (DLQ) kullanabilirsiniz. 

Sıralı olmayan kuyruklar

Uygulamalarınız sıralamaya bağlı olmadığında DLQ'lardan yararlanabilirsiniz. DLQ'lar hatalı mesaj iletimi işlemlerindeki sorunları gidermenize yardımcı olurken kuyruklarınızı izlemeye ve gönderilemeyen mesajları yeniden göndermeye devam etmelisiniz. 

FIFO kuyrukları

İlk giren ilk çıkar (FIFO) kuyruklarında mesaj sıralaması önemlidir. Her mesaj, bir sonraki mesajı iletmeden önce işlenmelidir. FIFO kuyrukları ile teslim edilemeyen iletiler sıralarını kullanabilirsiniz ancak DLQ uygulamanız da FIFO olmalıdır.

Ne zaman teslim edilemeyen iletiler sırası kullanmamalısınız?

Bir mesajın iletimini süresiz olarak yeniden denemeye devam edebilmek istediğinizde sıralı olmayan kuyruklara sahip bir teslim edilemeyen iletiler sırası (DLQ) kullanmamalısınız. Örneğin, programınızın bağımlı bir işlemin etkin veya kullanılabilir hâle gelmesini beklemesi gerekiyorsa teslim edilemeyen iletiler sırası kullanmayın. 

Aynı şekilde, mesajların veya işlemlerin sırasının değişmemesini istiyorsanız ilk giren ilk çıkar (FIFO) kuyruğuna sahip bir teslim edilemeyen iletiler sırası kullanmamalısınız. Örneğin, bir video düzenleme paketi için bir düzenleme karar listesindeki (EDL) yönergeleri içeren bir teslim edilemeyen iletiler sırası kullanmayın. Bu durumda, düzenlemelerin sırasını değiştirerek sonraki düzenlemelerim bağlamını değiştirirsiniz.

Teslim edilemeyen iletiler sırası nasıl çalışır?

Çoğunlukla bir teslim edilemeyen iletiler sırası (DLQ), sıradan bir mesaj kuyruğu gibi çalışır. Hatanın nedenini araştırmak için hatalı mesajları işleyene kadar bunları saklar.

Daha sonra DLQ'lar için yönlendirme politikasını ve DLQ'larda içeri ve dışarı mesaj aktarımının nasıl gerçekleştiğine bakacağız.

Yönlendirme politikası oluşturma

Yazılım, yönlendirme politikasına başvurarak mesajları bir teslim edilemeyen iletiler sırasına taşır. Yönlendirme politikası, yazılımın mesajları ne zaman teslim edilemeyen iletiler sırasına taşıması gerektiğini belirleyen kurallardan oluşur. Yönlendirme politikası, esas olarak maksimum yeniden deneme sayısını tanımlayarak kaynak sırası ve teslim edilemeyen iletiler sırasının birbiriyle etkileşime girme şeklini düzenler. 

Örneğin, geliştiriciniz maksimum yeniden deneme sayısını bir olarak ayarlarsa sistem, tek bir denemeden sonra tüm başarısız olan teslimleri DLQ'ya taşır. Bazı başarısız teslimler, geçici ağ aşırı yükü veya yazılım sorunlarından kaynaklanıyor olabilir. Bu, DLQ'ya teslim edilmeyen birçok mesaj gönderir. Doğru dengeyi elde etmek için geliştiriciler, mesajları DLQ'ya aktarmadan önce yazılımın yeterli sayıda yeniden deneme yapmasını sağlamak için maksimum yeniden deneme sayısını optimize ederler.

Mesajları teslim edilemeyen iletiler sırasına taşıma

Gönderen ve alıcı arasındaki teslim etme denemeleri, çeşitli nedenlerden dolayı başarısız olabilir: 

  • Alıcı, mevcut olmadığı için mesajı alamıyordur. 
  • Mesajlar hata içeriyordur. 
  • Mesaj, sıra veya mesaj uzunluğu sınırlarını aşıyordur. Örneğin bazı alıcılar, belirli bir boyutu aşan mesajları işleyemez. 
  • Mesajın yaşam süresi (TTL) dolmuştur. TTL, belirli bir veri paketinin ağda ne kadar süre geçerli olduğunu gösteren bir değerdir. 

Mesajları teslim edilemeyen iletiler sırasından taşıma

Mesajlar teslim edilemeyen iletiler sırasına girdiğinde geliştiriciler, nedenleri belirlemek için hatalı mesajları incelerler. DLQ'daki mesajlar, benzer sorunların gelecekte yeniden yaşanmasını önlemek için değerli bilgiler içerebilir. Geliştiriciler sorunları analiz edip düzelttikten sonra sistem, mesajları DLQ dışına ve kaynak sırasına taşır. Bu, gönderenin mesajları işlemeye devam etmesini sağlar. 

AWS, teslim edilemeyen iletiler sırası gereksinimlerinizi nasıl destekleyebilir?

Amazon Basit Sıra Hizmeti (Amazon SQS), dağıtılmış sistemler arasında geniş ölçekte mesaj alışverişi yapmak için ölçeklenebilir bir yaklaşım sağlar. Geliştiriciler, tamamen yönetilen standart sıralar ve ilk giren ilk çıkar (FIFO) sıralarıyla güvenilir web uygulamaları oluşturmak için Amazon SQS'yi kullanır.

Amazon SQS'nin diğer avantajları şunlardır:

  • Amazon SQS, sistemlerin sınırsız sayıda mesaj kuyruğu oluşturmasına olanak tanır
  • Geliştiriciler, maliyet verimliliği elde etmek için mesajları toplu olarak aktarabilirler
  • Amazon SQS, mesaj kilitlemeyi desteklediğinden birden fazla bilgisayarın aynı anda aynı mesajı işlemesini önler

Hemen bir AWS hesabı oluşturarak Amazon Web Services (AWS) hizmetini kullanmaya başlayın.

AWS'de Sonraki Adımlar

Ürünle ilgili diğer kaynaklara göz atın
Ücretsiz Uygulama Entegrasyonu Tekliflerini Keşfedin 
Ücretsiz bir hesap için kaydolun

AWS Ücretsiz Kullanım için anında erişim elde edin.

Kaydolun 
Konsolda oluşturmaya başlayın

AWS Yönetim Konsolu'nda oluşturmaya başlayın.

Oturum açın