Bir otomasyon bağlantı hatasında tekrar çalışabiliyorsa aynı olayın ikinci kez gelmesini normal bir durum kabul edin. Çift kaydı yalnız “bir kez çalıştır” ayarıyla önlemek yerine olayın değişmeyen kimliğini saklayıp işlemin daha önce tamamlanıp tamamlanmadığını kontrol edin. Buna idempotent, yani tekrar edildiğinde aynı etkiyi koruyan işlem tasarımı denir.
Bir HTTP yönteminin adı da tek başına iş kuralını güvenilir yapmaz. Uygulamanın gerçek yan etkisi ve hedef hizmetin idempotency desteği birlikte değerlendirilmelidir. Özellikle e-posta gönderme gibi dış etkilerde, hedef sistemin tekrar anahtarını destekleyip desteklemediğini ayrıca kontrol edin.
İstek ile gerçek işlemi ayırın
Varsayımsal bir sipariş aktarımında kaynak sipariş kimliği ORD-104 olsun. İlk istek hedefte kaydı oluşturduktan sonra yanıt yolda kaybolabilir. Kaynak sistem başarısız sanıp aynı siparişi tekrar gönderirse, yalnız yanıt durumuna bakan otomasyon ikinci kayıt oluşturur. Olay kimliği burada yeni rastgele sayı değil, aynı siparişi tanıyan sabit değerdir.Tek etki üreten akış kurun
- Sabit olay anahtarını seçin. Kaynak sistem, olay türü ve olay kimliğini birlikte değerlendirin. Sipariş oluşturma ile sipariş iptalini aynı anahtarda yanlışlıkla birleştirmeyin.
- Hedefte benzersiz alan tanımlayın. Aynı anahtarın iki kayda dönüşmesini veri tabanı veya hedef hizmetin benzersizlik desteğiyle engelleyin. Önce ara, sonra ekle yaklaşımı eş zamanlı iki istekte tek başına yeterli olmayabilir.
- İşlem durumunu saklayın. Alındı, işleniyor ve tamamlandı gibi durumları gerçek etkiyle ilişkilendirin. Hedef işlem başarısızken olayı tamamlandı işaretlemeyin.
- Tekrar geldiğinde uygun sonuç döndürün. Tamamlanan olay için yeni kayıt açmadan önceki sonucu kullanın. İşlenmekteyse çakışmayı yönetip kontrolsüz paralel işlem başlatmayın.
- Aynı örneği iki kez gönderin. Sonuçta bir hedef kayıt bulunduğunu ve ikinci isteğin farklı bir yan etki üretmediğini kontrol edin. Ardından ilk denemenin yarıda kesildiği durumu deneyin.
Her tekrar aynı veri demek değildir
Aynı anahtar altında farklı içerik geldiyse bunu sessizce ilk olayla birleştirmeyin. Güncelleme olayı mı, hatalı yeniden kullanım mı olduğunu belirleyin. Gerekirse içerik özeti veya sürüm numarasıyla farkı kaydedin.Bir HTTP yönteminin adı da tek başına iş kuralını güvenilir yapmaz. Uygulamanın gerçek yan etkisi ve hedef hizmetin idempotency desteği birlikte değerlendirilmelidir. Özellikle e-posta gönderme gibi dış etkilerde, hedef sistemin tekrar anahtarını destekleyip desteklemediğini ayrıca kontrol edin.