C#, Asp.Net, .Net Core
Rabbitmq'da 1 Service'in N Adet Yeri Consume Etmesi Hakkında ?
Rabbitmq'da 1 Service'in N Adet Yeri Consume Etmesi Hakkında ?
-
aga seninde kafan karışık belli. bu kadar adam anlayamadık :D
-
Bi sn ben anladım galiba,
sen farklı servislerden gelen mesajları toplayıp ortak servise bir iş yaptıracaksın.
soru bir bu servislerden gelen verilerin sırası önemli mi?
soru iki tüm servislerden bilgi gelmeden işleme başlanbilir mi?
Bakman gereken konu microservice saga mimarileri
-
yahu hocam neyini anlamadınız :D
örneklendireyim şöyle. 6 tane hoca var. Benim dersini aldığım, bu 6 tane hocadan gelen bildirimleri dinlemek istiyorum.
Ben ortadaki Mutual-Service'im 6 tane yada N adet öğretmenin bildirimleri dinliyorum.
6 tane hoca bildirim ekliyor, bende bu bildirimleri herhangi bir routing key vs olmadan direct exchange gibi dinlemek istiyorum.
Sorun şurada.
Öğretmen Ahmet : öğrenci adı, öğrenci kodu, sınav puanı şeklinde bir formatta veri gönderiyor Queue'ya
Öğretmen Mehmet : öğrenci adı, grup kodu şeklinde veri yolluyor
Öğretmen hasan : ders kodu, sınav notu şeklinde gönderiyor.
Ben ortadaki mutual service'im ya, bu adamların farklı şekillerdeki gönderdikleri işleri dinliyorum, JsonDeserialize kısmında ben bir model adı veriyorum ya ( JSonConvert.Deserialize<OgretmenAhmet> gibi bu kısımda N adet hoca gelecek herkesin modeli farklı, N tane alt alta yazsam olmaz, Bunu nasıl halledicem :D
-Hala anlamamış olamazsınız bence :D
-
Kafanız neden karıştı ya, ben okudum kız arkadaşıma okuttum o da anladı ne istediğimi.
Çok daha mantıklı bir örnek veriyorum.
Siz bir veterinersiniz. Farklı farklı insanlar size köpek getiriyorlar ama öyle bir dünya düşünün ki köpekleri direk size getirmiyorlar, bir Queue'ya yolluyorlar, sizde elinizdeki iş bitince bu queue'dan sıradaki hayvanı alıp tedavi ediyorsunuz.
2 tane hayvan sever var, Ayşe ve Fatma. Birisinin kaldığı bölgede çokça köpek bırakılıyor sokağa, diğerinin yaşadığı yerde ise çokça kedi bırakılıyor.
Birde sizin tedavi edemeğiniz canlıları gönderdiğiniz HASTANE var. Hastanede bu canlılar iyileşip hastanenin kendi QUEUE'suna ekleniyor, sizde gidip bu köpeği yada kediyi alıp Ayşe yada Fatmanın Queuesuna bırakıyorsunuz.
Benim Ayşenin Quesunu dinlediğimde Elime gelen işin içeriği şöyle : KöpekCinsi, KöpekAğırlığı, HastalıkKodu
Fatmanın Queue'sunu dinlediğimde elime gelen veri şöyle : KediCinsi,KediAğırlığı, BulunduğuYer,SahibiVarMi
Hastaneyi de dinliyorum Sağlıklı canlılar için : CanlıTürü, CanlıSahipKodu, CanlıAğırlığı, SonDurumu
Şimdii gelelim olaya ; Benim normalde 1 adet consumer'ım vardı. Bu 1 channel'ı dinliyordu. Gelen iş'e bakıyor ve JsonConvert.Deserialize edip bir modele dönüştürüyordu bunu. Fakat benim şimdi 3 adet farklı modelim var.
Bu yüzden hangi türde(kedi,köpek,hastanedeki havyan) veri geldi bilmiyorum.
nereden geldiğini de bilmiyorum, Ayşeden 10 tane köpek gelmiştir, Fatmadan 0 tane, Hastaneden 3 tane gelmiştir.
Ben böyle bir durumda 3 tane channel oluşturup 3 tane consumer' mı oluşturmam lazım ? Yoksa 1 consumer ile bu işi çözebilir miyim ?
Hala anlamamış olamazsınız yaw :D
-
İlk mesajından bu anlaşılmıyor mesela ben kendi çözmeye çalıştığım transaction problemlerine kafam gitti:)
Ben bu aralar tüm bankanın loglama alt yapısının tekrar yazıldığı bir projeyi yönetiyorum. 100 küsür uygulama var ve hepsinin hem kendi log yapısı farklı hem de eventten evente loglarda değişebiliyor. Doğru yaklaşım bunların hepsini mümkün olduğunca aynı veri modeline dönüştürüp, uymayan kısımları bir fieldda json olarak toplamaktı.
Örnek: Tüm uygulama loglarında; uygulama adi, channel, transaction id, journey id, timestamp, status, request,responce diye alanlar var. Tüm uygulamalar standart alanları dolduruyor ama request ve responce'u non-structural olarak dolduruyorlar. Böylelikle hepsini alıp bir tablo formatında bir yere yazdırıp full-text search ile istediğimizi buluyoruz.Bu bir yaklaşım, bunu uygulamanın amacını ve mantığını bilmeden sana uygun hala getirmem ama bir yere yazacak veya push edip işlem yaptıracaksan channel veya uygulama adından işlemi yakalayıp body içerisindeki json'ı öyle işlersin.
veya her kuyruk için oturup ayrı bir consumer yazacaksın çünkü ona göre ayrı logicler çalışacak.
-
sandman bunu yazdı
İlk mesajından bu anlaşılmıyor mesela ben kendi çözmeye çalıştığım transaction problemlerine kafam gitti:)
Ben bu aralar tüm bankanın loglama alt yapısının tekrar yazıldığı bir projeyi yönetiyorum. 100 küsür uygulama var ve hepsinin hem kendi log yapısı farklı hem de eventten evente loglarda değişebiliyor. Doğru yaklaşım bunların hepsini mümkün olduğunca aynı veri modeline dönüştürüp, uymayan kısımları bir fieldda json olarak toplamaktı.
Örnek: Tüm uygulama loglarında; uygulama adi, channel, transaction id, journey id, timestamp, status, request,responce diye alanlar var. Tüm uygulamalar standart alanları dolduruyor ama request ve responce'u non-structural olarak dolduruyorlar. Böylelikle hepsini alıp bir tablo formatında bir yere yazdırıp full-text search ile istediğimizi buluyoruz.Bu bir yaklaşım, bunu uygulamanın amacını ve mantığını bilmeden sana uygun hala getirmem ama bir yere yazacak veya push edip işlem yaptıracaksan channel veya uygulama adından işlemi yakalayıp body içerisindeki json'ı öyle işlersin.
veya her kuyruk için oturup ayrı bir consumer yazacaksın çünkü ona göre ayrı logicler çalışacak.
Heh hocam bende sanırım bu siyah alan gibi yapıcam, daha önce yaptım. yeni bir channel oluşturdum, yeni bir consumer oluşturdum ve dedim ki YeniConsumer sen sadece hastane kayıtlarını dinleyeceksin,
Fakat hala anlamadığım bir şekilde hala her hayvanseveri hemde hastaneyi dinliyor yeni oluşturduğum channel.
-
rappidmq configlerinde hata vardır bir kontrol et, olmadı yeni bir kuyruk yarat.
-
6 farklı queue de 6 farklı tip varsa sıkıntı değil hocam. kaçtane class varsa onların hepsine bir inheritance ekle örnek :BaseClass olabilir bu baseclassta sadece ClassName isimli bir property oluştur. böylece isterse 100 farklı queue ve 100 farklı class olsun sen queueden consume ettiğin objeyi BaseClass ile convert edeceksin. ordan ClassName elinde olacağı için sonrasında ufak bir methodlar hangi class ise ona cast işlemini yapabilrsin. tabi publish ettiğin yerde o classın ne olduğunu bildiğin için ClassName kısmına obje tipinin tam adını yazman lazım.
-
Sen bunu tek q ile de yaparsın. Sen gelen mesajın ne olduğunu önce ayırt etmen lazım. Bunun için mesajın header ına bir key ekleyerek mesaj tipğne göre ayrı parserlara gönderebilirsin. Header a göre ferklı q lara da route edebilirsin. Temelde yapman gereken ortak bi mesaj formatı oluşturmak onun body kısmı senin eventine göre değişecek. Bi akşam zoom at konuşalım.