Konuyu Açan
#1
Bir ödeme ya da CRM webhook’u aynı olayı birkaç kez gönderebiliyor; üstelik uygulama tam olayı işlerken bağlantı koparsa, “işlendi mi, tekrar mı deneyelim?” sorusu ortaya çıkıyor. Ben bu akışı doğrudan iş mantığına bağlamak yerine önce veritabanına kalıcı olarak yazmayı daha güvenli buluyorum.
Inbox yaklaşımında dikkat ettiğim noktalar:
Buradaki ince nokta, yinelenen olay geldiğinde bunu hata saymamak. Benzersiz indeks çakışmasını tanıyıp mevcut olayın zaten alındığını kabul etmek genellikle yeterli; ama sağlayıcının olay kimliği yoksa imza, zaman damgası ve içerik özetiyle kendi anahtarınızı üretmeniz gerekebilir.
Siz webhook’larda doğrudan işlem mi yapıyorsunuz, yoksa kalıcı bir inbox ve kuyruk katmanı mı kullanıyorsunuz? En çok hangi hata senaryosu başınızı ağrıttı?
Inbox yaklaşımında dikkat ettiğim noktalar:
- Sağlayıcının olay kimliğini saklayıp sağlayıcı adıyla birlikte benzersiz indeks koyuyorum. Böylece aynı olay tekrar geldiğinde ikinci bir kayıt oluşmuyor.
- HTTP isteğinde doğrulamayı yaptıktan sonra olayı kaydediyorum; kayıt başarılıysa 2xx dönüp asıl işlemi kuyruktaki bir worker’a bırakıyorum. Worker çökerse kayıt kaybolmuyor, yeniden denenebiliyor.
- İş mantığı da idempotent olmalı. Örneğin “bakiyeye 100 ekle” yerine, ilgili ödeme kaydının durumunu kontrollü biçimde güncellemek çift uygulama riskini azaltıyor.
Buradaki ince nokta, yinelenen olay geldiğinde bunu hata saymamak. Benzersiz indeks çakışmasını tanıyıp mevcut olayın zaten alındığını kabul etmek genellikle yeterli; ama sağlayıcının olay kimliği yoksa imza, zaman damgası ve içerik özetiyle kendi anahtarınızı üretmeniz gerekebilir.
Siz webhook’larda doğrudan işlem mi yapıyorsunuz, yoksa kalıcı bir inbox ve kuyruk katmanı mı kullanıyorsunuz? En çok hangi hata senaryosu başınızı ağrıttı?