{"id":4,"date":"2025-02-13T10:00:00","date_gmt":"2025-02-13T07:00:00","guid":{"rendered":"https:\/\/www.hasangultekin.com\/2025\/02\/13\/n8n-workflows-safe-to-retry\/"},"modified":"2025-02-13T10:00:00","modified_gmt":"2025-02-13T07:00:00","slug":"n8n-workflows-safe-to-retry","status":"publish","type":"post","link":"https:\/\/www.hasangultekin.com\/tr\/2025\/02\/13\/n8n-workflows-safe-to-retry\/","title":{"rendered":"n8n \u0130\u015f Ak\u0131\u015flar\u0131n\u0131n Yeniden Denemeyi G\u00fcvenli Hale Getirilmesi"},"content":{"rendered":"<p>Bir i\u015f ak\u0131\u015f\u0131, uzak bir sistemde bir kay\u0131t olu\u015fturur, ard\u0131ndan yan\u0131t beklerken zaman a\u015f\u0131m\u0131na u\u011frar. Y\u00fcr\u00fctme, ba\u015far\u0131s\u0131z olarak i\u015faretlenir. Bir operat\u00f6r \u201ctekrar dene\u201d d\u00fc\u011fmesine basar ve uzak sistem ayn\u0131 olu\u015fturma iste\u011fini yeniden al\u0131r.<\/p>\n<p>Bu ak\u0131\u015ftaki hi\u00e7bir ad\u0131m, ola\u011fand\u0131\u015f\u0131 bir kesintiye yol a\u00e7maz. Bu, bir a\u011f \u00fczerinden i\u015flerin y\u00fcr\u00fct\u00fclmesinin normal bir sonucudur. n8n otomasyonlar\u0131n\u0131 tasarlarken, tekrar oynatma davran\u0131\u015f\u0131n\u0131 i\u015f ak\u0131\u015f\u0131n\u0131n i\u015f mant\u0131\u011f\u0131n\u0131n bir par\u00e7as\u0131 olarak ele al\u0131r\u0131m.<\/p>\n<h2>\u0130\u015fleme istikrarl\u0131 bir kimlik verin<\/h2>\n<p>Bir y\u00fcr\u00fctme tan\u0131mlay\u0131c\u0131s\u0131, hangi denemenin ger\u00e7ekle\u015ftirildi\u011fini g\u00f6sterir. Ancak bu, i\u015f i\u015flemini mutlaka tan\u0131mlamaz. \u0130\u015f ak\u0131\u015f\u0131 yeniden ba\u015flarsa, yeni y\u00fcr\u00fctme yine de ayn\u0131 sipari\u015fi d\u0131\u015fa aktarmaya \u00e7al\u0131\u015f\u0131yor olabilir.<\/p>\n<p>Kirac\u0131, kaynak kay\u0131t, eylem ve ilgili s\u00fcr\u00fcmden olu\u015fan bir i\u015flem anahtar\u0131 tercih ederim. \u00d6rne\u011fin, bir sipari\u015fin belirli bir revizyonunun d\u0131\u015fa aktar\u0131lmas\u0131, yeniden denemeler boyunca ayn\u0131 anahtara sahip olmal\u0131; buna kar\u015f\u0131n, daha sonraki bir revizyonun d\u0131\u015fa aktar\u0131lmas\u0131 ise farkl\u0131 bir anahtara sahip olmal\u0131d\u0131r.<\/p>\n<p>Anahtar, e\u015fzamanl\u0131l\u0131k ko\u015fullar\u0131nda benzersizli\u011fi sa\u011flayabilen bir sistemde depolanmal\u0131d\u0131r. Bir de\u011ferin mevcut olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek ve ard\u0131ndan onu ayr\u0131 ad\u0131mlarda eklemek, iki i\u015f\u00e7i ayn\u0131 anda \u00e7al\u0131\u015fmaya ba\u015flad\u0131\u011f\u0131nda bir yar\u0131\u015f durumu yarat\u0131r.<\/p>\n<h2>Yan etkilerin s\u0131n\u0131rlar\u0131n\u0131 belirleyin<\/h2>\n<p>Saf d\u00f6n\u00fc\u015f\u00fcmler genellikle kolayca tekrarlanabilir. Mesaj g\u00f6ndermek, fatura olu\u015fturmak veya stok bilgilerini de\u011fi\u015ftirmek gibi i\u015flemler i\u00e7in daha dikkatli bir s\u0131n\u0131r belirlenmesi gerekir.<\/p>\n<p>Tercih etti\u011fim s\u0131ralama \u015fudur: Hedeflenen i\u015flemi kaydetmek, bu i\u015flemi atomik olarak talep etmek, destekleniyorsa bir idempotans anahtar\u0131 kullanarak harici hizmeti \u00e7a\u011f\u0131rmak ve sa\u011flay\u0131c\u0131n\u0131n referans\u0131n\u0131 kaydetmek. Zaman a\u015f\u0131m\u0131, uzla\u015ft\u0131rma gerektiren belirsiz bir i\u015flem b\u0131rak\u0131r; bu durum otomatik olarak bir ba\u015far\u0131s\u0131zl\u0131k kan\u0131t\u0131 olarak de\u011ferlendirilmemelidir.<\/p>\n<p>Hizmet sa\u011flay\u0131c\u0131 idempotans \u00f6zelli\u011fini desteklemiyorsa, harici bir referans kullanarak sorgulama yapman\u0131n g\u00fcvenilir bir yolunu arar\u0131m. Her iki se\u00e7enek de mevcut de\u011filse, i\u015f ak\u0131\u015f\u0131nda bir inceleme kuyru\u011funa ihtiya\u00e7 duyulabilir. \u0130kinci bir k\u00f6r\u00fc k\u00f6r\u00fcne deneme, \u00f6zellikle de eylem kolayca geri al\u0131nam\u0131yorsa, bir i\u015f karar\u0131d\u0131r.<\/p>\n<h2>Giderilemeyen hatalar\u0131, d\u00fczeltilebilir verilerden ay\u0131r\u0131n<\/h2>\n<p>Ge\u00e7ici bir ba\u011flant\u0131 hatas\u0131 daha sonra d\u00fczeltilebilir. Eksik bir m\u00fc\u015fteri kimlik numaras\u0131 ise genellikle d\u00fczeltilemez. S\u00fcresi dolmu\u015f bir kimlik bilgisi i\u00e7in bir operat\u00f6r\u00fcn m\u00fcdahalesi gerekebilir; h\u0131z s\u0131n\u0131rlamas\u0131 durumunda ise bir bekleme s\u00fcresi ve daha d\u00fc\u015f\u00fck e\u015fzamanl\u0131l\u0131k gerekebilir.<\/p>\n<table>\n<thead>\n<tr>\n<th>Ba\u015far\u0131s\u0131zl\u0131k<\/th>\n<th>\u0130\u015f ak\u0131\u015f\u0131 yan\u0131t\u0131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Ge\u00e7ici hizmet hatas\u0131<\/td>\n<td>Artan gecikme ve dalgalanma ile s\u0131n\u0131rl\u0131 yeniden deneme<\/td>\n<\/tr>\n<tr>\n<td>Ge\u00e7ersiz kaynak kayd\u0131<\/td>\n<td>Okunabilir bir do\u011frulama gerek\u00e7esiyle karantina<\/td>\n<\/tr>\n<tr>\n<td>Belirsiz harici yazma<\/td>\n<td>\u0130\u015flem referans\u0131n\u0131 kullanarak mutabakat\u0131 ger\u00e7ekle\u015ftirin<\/td>\n<\/tr>\n<tr>\n<td>Eksik izin<\/td>\n<td>Etkilenen i\u015flemi durdurun ve yap\u0131land\u0131rma onar\u0131m\u0131 isteyin<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Yeniden deneme politikas\u0131 i\u00e7in toplam bir zaman b\u00fct\u00e7esi de gereklidir. G\u00fcnlerce yeniden deneme yapan bir otomasyon, i\u015f ba\u011flam\u0131 de\u011fi\u015fmi\u015f olduktan sonra bir eylemi uygulayabilir. Eski i\u015fler i\u00e7in bir son ge\u00e7erlilik tarihi veya yeni bir uygunluk kontrol\u00fc bulunmal\u0131d\u0131r.<\/p>\n<h2>Devam edebilmek i\u00e7in yeterli durumu koruyun<\/h2>\n<p>\u00d6nemli i\u015f s\u0131n\u0131rlar\u0131nda kal\u0131c\u0131 kontrol noktalar\u0131 tutar\u0131m. Bir d\u0131\u015fa aktarma i\u015flemi ba\u015far\u0131l\u0131 olmu\u015f ancak bildirim ba\u015far\u0131s\u0131z olmu\u015fsa, kurtarma i\u015flemi bildirimi hedef almal\u0131d\u0131r. \u0130\u015f ak\u0131\u015f\u0131n\u0131n tamam\u0131n\u0131 tetikleyicisinden itibaren yeniden \u00e7al\u0131\u015ft\u0131rmak, yaln\u0131zca \u00f6nceki her eylemin tekrarlanmas\u0131n\u0131n g\u00fcvenli oldu\u011fu durumlarda uygun olur.<\/p>\n<p>Her kontrol noktas\u0131, bekleyen, devam eden, tamamlanm\u0131\u015f, ba\u015far\u0131s\u0131z ve durumu belirsiz i\u015fleri birbirinden ay\u0131rt etmelidir. Devam eden bir i\u015flem i\u00e7in ayr\u0131ca, \u00e7\u00f6ken bir i\u015f\u00e7inin bu i\u015flemi sonsuza kadar elinde tutmamas\u0131 amac\u0131yla bir kiralama veya kurtarma kural\u0131 gereklidir.<\/p>\n<p>G\u00fcnl\u00fck kay\u0131tlar\u0131, i\u015flem anahtar\u0131n\u0131, deneme numaras\u0131n\u0131, harici referans\u0131 ve i\u015f ak\u0131\u015f\u0131 s\u00fcr\u00fcm\u00fcn\u00fc i\u00e7ermelidir. Kontrol edilen bir referans soru\u015fturmay\u0131 destekleyebiliyorsa, her hata mesaj\u0131na tam m\u00fc\u015fteri y\u00fcklerini eklemekten ka\u00e7\u0131n\u0131r\u0131m.<\/p>\n<h2>Uygunsuz zamanlamay\u0131 test edin<\/h2>\n<p>Bir otomasyona g\u00fcvenmeden \u00f6nce, ana d\u0131\u015f eyleminin hemen \u00f6ncesinde ve hemen sonras\u0131nda bir ar\u0131za sim\u00fclasyonu yapar\u0131m. Ayr\u0131ca ayn\u0131 girdiyi iki kez \u00e7al\u0131\u015ft\u0131r\u0131r ve iki denemeyi ayn\u0131 anda ba\u015flat\u0131r\u0131m.<\/p>\n<p>Bu kontroller, sadece bir ba\u015fka ba\u015far\u0131l\u0131 denemeden daha fazlas\u0131n\u0131 ortaya koymaktad\u0131r. Yararl\u0131 bir i\u015f ak\u0131\u015f\u0131, halihaz\u0131rda nelerin yap\u0131ld\u0131\u011f\u0131n\u0131, nelerin h\u00e2l\u00e2 belirsiz oldu\u011funu ve operat\u00f6r\u00fcn hangi eylemi g\u00fcvenli bir \u015fekilde tekrarlayabilece\u011fini a\u00e7\u0131klayabilir.<\/p>\n<p class=\"hg-editorial-note\"><small>25 Eyl\u00fcl 2026 tarihinde g\u00fcncellenmi\u015ftir.<\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>Bir i\u015f ak\u0131\u015f\u0131, harici eylemi ba\u015far\u0131l\u0131 bir \u015fekilde tamamland\u0131ktan sonra bile ba\u015far\u0131s\u0131z olabilir. \u0130\u015flemler, kontrol noktalar\u0131 ve a\u00e7\u0131k hata durumlar\u0131n\u0131 dikkate alarak yeniden deneme mekanizmalar\u0131 tasarlay\u0131n.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"footnotes":""},"categories":[149],"tags":[156,169,196],"class_list":["post-4","post","type-post","status-publish","format-standard","hentry","category-backend-architecture","tag-automation","tag-idempotency","tag-n8n"],"_links":{"self":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/posts\/4","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/comments?post=4"}],"version-history":[{"count":0,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/posts\/4\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/media?parent=4"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/categories?post=4"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/tags?post=4"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}