# 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/)