# Database DML Event Handling Bu belge ile veritabanı kayunaklı değişikler ile tetiklenen işlerin geliştirilmesi konusunda temel tasarım yaklaşımı oluşturulması hedeflenmiştir. Veritabanı değişikleri örneklerine baktığımız da * Hesap açtığında * Hesabına bloke konduğunda * Gün içinde döviz aldığında * Müşteri MOB onayı aldığında * Müşteriye EFT geldiğinde gibi değişiklikler sonucunda * İletişim amaçlı eylemlerin tetiklendiği * Bir iş akışının başlatıldığı * Bir servisin cağrıldığı * Bir veri tabanı güncellemesinin gerçekleştiği işlemler gerçekleştiğini görüyoruz. Bu işlemler çoğunlukla **Değişikliği yapan ekran ve servisler ile** veya **Veritabanını belli peryotlar ile sorgulayan zamanlanmış görevler** ile gerçekleştiriliyor. İlk yöntem iş mantığının katmanlar arasına dağılmasına neden olurken ikinci yöntemde ise veritabanı sık sık sorgulanarak veritabanı yükü arttırılıyor. ## Queue(Kafka) Tabanlı **Event Aggregation** ### Senaryo Yeni müşteri MOB onayı aldığında Kredi Kartı göndermek için kart gönderim akışının başlatılması gerekmektedir. #### Çözüm ##### 1 - CDC Müşteri Tablosu tüm DML işlemleri için CDC ile KAFKA için tanım bir Topic üzerine aktarılır. :::warning Müşteri tablosu sadece bir defa CDC ile KAFKA üstüne taşınır. Birden fazla ihtiyaç için aynı topic farklı **Consumer Group** tanımları ile çağrılır. ::: ##### 2 - Event Topic Müşteri MOB onayı değişimi olduğunda **1.** aşamada elde edilen akıştan yeni bir topic kaydı oluşturulması sağlanır. :::info Var olan bir Topic kullanarak filtrelenmiş verilerle başka bir topic oluşturmak için Kafka Streams, kSQL veya Apache Flink kullanılabilir. ::: ##### 3 - Uygulama Soruna özel olarak sorunu çözümü için ilgili Kafka topiğini dinleyip gereklilikleri yerine getiren proje geliştirilir ve kubernetes üstünme deploy edilir. ### Benzer Senaryolar * Ticari bir müşterinin hesabına e-haciz blokesi konması durumunda müşterinin şubesine haber verilmesi gerekmektedir. * Merkez bankasından para transferi ile ilgili bir iptal geldiğinde müşteriye push mesaj iletilmesi. ## Uygulama Özellikleri * Kubernetes üzerinden çalışacak şekilde kodlanır. * Azure DevOps pipeline ile Push yapıldığında test ortamlarına, onay aldığında production ortamlarına deploy edilir. * Uygulama ELK APM ile entegre çalışır. * Uygulama her zaman /healthcheck url sunar. * Kuyruk erişim sağlığı * Uygulamanın eriştiği diğer kaynaklara erişim sağlığı * Uygulama kafka üzerinden bir topic tarafından iletilen message ile tetiklenen bir Background worker fonksiyonudur. * Mesaj transactional olarak işlenir. İşlem başarılı olduğu durumda message read işlemi commit edilir. * Uygulama içsel olarak gerçekleştirdiği işleri dışardan erişilebilir rest api olarak sunar. (*Geliştirilen işlemin belli durumlarda manuel tetiklenmesi gerebilir. Bu yüzden Business Logic ayrı bir şekilde servis olarak kodlanır.*) --- > **Okumalıklar** > [Kafka Terminoloji](https://medium.com/@ruwansriw/apache-kafka-terminology-f0b5350c26e4) > [Kafka Error Handling](https://blogs.perficient.com/2021/02/15/kafka-consumer-error-handling-retry-and-recovery/)