Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Worker Service ve In-Process Job Queue: Channel, PeriodicTimer ve Windows Service/systemd
Bounded Channel ile kurulan in-process job queue, dolduğunda TryWrite false döner; endpoint bunu Retry-After başlıklı bir 503'e çevirerek backpressure uygular. Periyodik iş için PeriodicTimer kaçırılan tick'leri biriktirmez, uzun süren bir turdan sonra en fazla bir kez hemen tetiklenir. AddWindowsService ve AddSystemd yalnız ilgili ortamda devreye girer; queue ise restart'ta boşalır.
Trade-off Düşüncesi: Mimaride Doğru Cevap Yok, En Az Kötü Seçenek Var
Mimaride her seçenek bir characteristic'i başka birinin pahasına kazanır; iş, bedeli görünür kılıp bilinçli kabul etmektir. Bookstore'da sipariş e-postasını senkron göndermek checkout'u SMTP'ye bağlayıp çift sipariş üretirken, Channel<T> ile queue'ya almak checkout'u 1 ms'ye indiriyor ama process kapanınca 3 e-postayı kaybediyor; one-way/two-way door, last responsible moment ve kararın neden'ini yazmak.
C# Channels ile Producer/Consumer: Backpressure, Bounded Channel ve Pipeline
System.Threading.Channels ile async queue: kapasitesi iki olan channel'a neden üç sipariş sığıyor, Writer/Reader ve Complete, WaitToReadAsync/TryRead döngüsü, bounded channel'da FullMode seçenekleri ve itemDropped, birden çok consumer, hatayı Complete(ex) ile ileten bir sipariş pipeline'ı ve Complete'i unutmanın bedeli.