ben olsam bunları bir queue da biriktirip bunlar için ayrı bir mail gonderme jobu yazardım, o job 10 dk da bir çalışır eğer 3 task te tamamlanmışsa maili gonderir yoksa queue dan silerdi falan. Hocam benimde aklıma geldi o yntem ama orada işlem ağacındaki her işlemin aynı job-id ile tutulması, onların takip edilmesi, servisin sonunda onun bittiğini filan tanımlamak gibi bir sürü hammamlık ve çok manuel ve hataya açık bir yapı olarak grünüyor. herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri ğrenmeye çalışmayın. yabancı dil filan ğrenin amq.// s. kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//

yolbulucu bunu yazdı ben olsam bunları bir queue da biriktirip bunlar için ayrı bir mail gonderme jobu yazardım, o job 10 dk da bir çalışır eğer 3 task te tamamlanmışsa maili gonderir yoksa queue dan silerdi falan. Hocam benimde aklıma geldi o yntem ama orada işlem ağacındaki her işlemin aynı job-id ile tutulması, onların takip edilmesi, servisin sonunda onun bittiğini filan tanımlamak gibi bir sürü hammamlık ve çok manuel ve hataya açık bir yapı olarak grünüyor. hocam o kadar da karmaşık olmayacak ki, bir tane queue var diyelim, sen mail gondermek yerine her üç parçadan biri bittiğinde bu queue ya atıyosun mail işini, sonra yazdığın diğer worker da bu queue ya gelenleri takip edip gelen işlerin üç parçası da tamamlanmışsa mailleri atıyor. zaten bu üç mailinde ortak noktası olan bir id vardır elinde illa 29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.

Herkese cevapları için teşekkürler. Henüz implemente etmedim ancak aklıma şyle bir fikir geldi. Bu mail gnderme işlemleri bir request içerisinde gerçekleşiyor. Request içinde bir array oluşturup, ynetilen hatalarda el ile, ynetilmeyen hatalarda da middleware'da yakalayıp bu mail array'ini boşaltmayı. Eğer request hatasız respons'a dnersede otomatik olarak bu queue daki mailleri gndermeyi en basit çzüm olarak düşündüm ama hayırlısı bakalım. herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri ğrenmeye çalışmayın. yabancı dil filan ğrenin amq.// s. kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//

şyle gidebilirsim hocam; bir mail gnderme servisi yap, diğer tüm servisler mail gndermek için bu servisi kullansın. bu mail servisinin de transactioni kurugusu olsun. tüm servislerini kullanırken bir transaction kimliğiyle çağır, onlar da mail serivisine aynı kimlikle mail actionları gndersin.transaction tamamlandığında mail servisine bu kimlikle tamamlandı gnderip mailleri gndertirsin. rollback durumunda da aynı kimlikle mail servisine rollback gnderirsin. ...

Microservis mimarisinde kullanılan orchestrated saga gibi bir pattern işini grür gibi. Saga'nı iyi tasarlarsan tüm adımların sağlıklı olduktan sonra eposta gider Mühendis kahveyi projeye dnüştüren bir insan evladıdır.

ben olsam bunları bir queue da biriktirip bunlar için ayrı bir mail gonderme jobu yazardım, o job 10 dk da bir çalışır eğer 3 task te tamamlanmışsa maili gonderir yoksa queue dan silerdi falan. 29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.

Merhaba Hocam, Eğer mikroservis kullanıyorsan bir ekosistemin var ise mail gnderme için bir servis yapar broker a bağlarsın birde logstash koyarsın mailler log stashe gider burada 3 mail geldikten sonra mail gnderme servisine ynlendirirsin yoksa bir timeout koyarsın veriyi uçurursun zellikle kafka geçmiş verileri kanalda tutabildiği için çok daha rahat işini çzebilirsin diğerlerinde bu veriyi senin tutman gerekebilir. Byle bir ekosistemin yok ise; Bir mail gnderme servisin olur her mail gnderecek servis belirli bir task id ile maili gnderir bu task id 3 servis içinde aynı olmalı fakat bu mail servise bu task id için commit mesajı gelmediği sürece mailleri gndermeyecek, rollback gelirse silecek. 1. senaryo servislerin sıralı çalışıyor ise işini bitiren bu servise mail gnderir ama sadece en son commit yapar arada rollback olduğunda burada rollback ilgili task id ile rollback komutu verilir 2. senaryo servislerin sıralı değil veya değişken adımların var ise her bir task id si ile birlikte kaç mail olması gerektiğini mail servisinin enpointine gnderirsin eğer mail servisinin elinde ilgili id ile belirtilen sayıda mail var ise otomatik commit yapar gnderir yoksa beklemeye devam eder yine rollback geldiğinde siler. bunlara benzer senaryoları artırabilrisiniz Not olarak : ihtiyacınızın sebebini detayını bilmemek ile birlikte mevcut belirttiğiniz tasarım hatalı gibi grünüyor ya işlemlerin birbirinden bağımsız tasarlanması gerekir ve her birinin maili bir diğerini etkilemez veya FaaS sistemlerinde olduğu gibi her bir methodu çağırıp yneten ve hepsi için bir transaction ynetebilecek main function olur main function bu işlemleri halleder. Kolay gelsin. ...

Hocam her türlü angarya iş, kullanıcıya yanlış eposta gndermekten iyidir. Ben olsam job için bir id ve status tutardım. (STAGE1, ... STAGEN, DONE) gibi. Ortaya da bir Kafka ya da RabbitMQ koyup, job her aşamayı geçince status update ederdim. DONE statusune geçerse tüm mailleri o zaman attırırdım. Mailin 5 dakika geç gitmesi, yanlış gitmesinden daha sağlıklı bence. Message Broker kullandıktan sonra 3-4 servis değil onlarca servisin bile olsa her birinin birbiri ile haberleşmesine gerek olmayacağı için zannedildiği kadar karmaşık olmayan bir yapı çıkar ortaya. Sen hiç kaval çaldın mı?

Başlık tam olarak konuyu açıklayamıyor ancak mevzu şu. Bir servis içinde farklı 3-4 tane farklı servislerden farklı methodlar çağrılıyor ve bu methodlar kendi içlerinde işlem yaptıkran sonra mail atabiliyor. 1. servis methodu çalışıp mail attıktan sonra 2. servis servisin methodunda exception olduğu zaman DB kayıtları rollback ediliyor. Ancak 1. servisin çağırdığı mail gitmiş oluyor ama o kayıt rollback olduğu için kullanıcıya geçersiz mail gitmiş oluyor. Bu tür durumlardan kaçınmak için nasıl bir yntem izliyorsunuz, yada bu durumlar için kullandığınız bir pattern vs. varmı? Not: PHP Laravel ile geliştirme yapıyorum ancak başka bir framework yada dil deki yntemi kendim implemente edebilirim, dil sorun değil yani. TeRRoR tarafından 17/Ara/19 22:49 tarihinde düzenlenmiştir herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri ğrenmeye çalışmayın. yabancı dil filan ğrenin amq.// s. kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//