Ana içeriğe geç

Error Handling Patternleri#

Spot on Error#

Herhangi bir hata oluştuğunda uygulama durur ve manuel müdehale gerektirir. Exception oluşmadan bütün input'ların işlenmesi gerektiği durumlar için geçerlidir.

Dead Letter Queue#

Çok kullanılan bir yöntemdir. Bu yöntemde ana akış devam eder ve hata alan event'ler(hatalı format vb. durumlarda) bir error topic'ine yönlendirilir. Herhangi bir retry durumu yoktur sadece işlenemeyen event'lerin farklı bir topic'e toplanması sağlanır.

Retry#

Bazı koşullar sağlanamadığında işlenemeyen event'ler olduğu durumlar için geçerlidir. Hata alan mesajlar error topic'e gönderilirken, bağlı olduğu verileri bekleyen event'ler belirli aralıklarla tekrar denenmek üzere retry mekanizmasına dahil olur. Burada önemli olan event'lerin alındığı sırada işlenmesi garanti edilmez. Bunun nedeni retry mekanizmasının daha uzun ve yavaş sürmesidir.

Maintain Order of Redirected Events#

Bazı durumlarda bu sıralamanın bozulması sorun yaratabilir. Uygulama retry topic’ine yönlendirilen her event’i takip etmek zorundadır. Bağlı koşul karşılanmadığında uygulama ilgili event için local in-memory’de unique identifier tutmaktadır. Bu identifier’la ilgili item’a göre gruplanır. Bu da item ile ilgili event’lerin yeniden denenip denenmediğini anlamasına yardımcı olur. Böylece bununla ilgili sonraki event’lerin retry’a gönderilmesi gerektiğini belirlenmesini sağlar.

1) Local in-memory store'da mesaj için bir unique ID tutar. 2) Header’a unique ID ekleyerek mesajı retry topic’ine gönderir. Retry tamamlandığında event’in yayınlanmasını sağlar. 3) Alınan mesajın unique ID’sini redirect topic’ine publish eder.

Yeni bir event geldiğinde, uygulama local store’da bağlantılı event var mı diye kontrol eder. Eğer retry edilen bağlantılı event varsa yeni gelen event’i de retry akışına sokar. Böylece bütün event’lerin sırayla işlenmesini sağlar.

Retry uygulaması event’leri geldikleri sıra ile ele alır. Bir event başarılı bir şekilde retry ve target topic’e publish edildiğinde, retry uygulaması retry topic’ine tombstone event şeklinde onay gönderir.

Uygulama başarılı retry olan tombstone event’ler için redirect topic’ini dinler ve in-memory store’dan mesajları siler. Uygulamaya yeni bir mesaj ulaştığında local store kontrol edilip entriy olmadığı görülürse event doğrudan target topic’e gönderilir.

Retry'a Girmeyip Direkt Recover Edilen Exceptionlar#

Consumer tarafında alınan her exception retry edilmez. Default durumda aşağıdaki exception'lar retry edilmeden direkt olarak recover durumuna düşerler.

  • DeserializationException
  • MessageConversionException
  • ConversionException
  • MethodArgumentResolutionException
  • NoSuchMethodException
  • ClassCastException