RabbitMqExampleProject · RabbitMQ ile Mesajlaşma ve Dosya Aktarımı Örneği
Dosya okuma/yazma adımlarını JSON/UTF-8 mesajlarıyla Producer ve Consumer süreçlerine ayıran, RabbitMQ temel akışını gösteren eğitim çalışması.
Bir uygulamanın okuduğu metni başka bir uygulama dosyaya yazacaksa iki işlem arasına bir kuyruk konabilir. Bu .NET 5 konsol örneği, iki ayrı süreci RabbitMQ üzerinden bağlıyor. Üretici bir dosyanın içeriğini datawrite kuyruğuna gönderiyor. Tüketici kuyruktan aldığı mesajı açıp bir çıktı dosyasına yazıyor. Akış, dosyanın yolunu giren kişiyle dosyaya yazan sürecin sorumluluklarını ayırıyor.
Dosyadan kuyruğa, kuyruktan diske
RabbitMQ.Producer konsoldan aldığı yolu ExtensionsFileIO.ReadFile metoduna veriyor. Yardımcı metot dosyayı satır satır okuyup satır sonlarını taşımadan metni DataModel.Data içinde birleştiriyor. Üretici modeli Newtonsoft.Json ile JSON’a, ardından UTF-8 baytlarına dönüştürüyor. Mesaj varsayılan exchange üzerinden, datawrite yönlendirme anahtarıyla aynı adlı kuyruğa gidiyor.
RabbitMQ.Consumer bu kuyruğu EventingBasicConsumer ile dinliyor. Received olayı geldiğinde mesajı UTF-8 metne ve tekrar DataModel nesnesine dönüştürüyor. Dosya yardımcısı içeriği C:\testdata.txt yoluna yazıyor. Her yazma dosyanın başından başlıyor. Örneğin ikinci mesaj daha kısaysa dosyanın sonunda ilk yazımdan baytlar kalabilir. Denemede bu davranışı görmek için önce uzun, ardından kısa bir metin göndermek ve her yazımdan sonra dosyayı açmak yeterli.
İki süreçle yapılabilecek bir deneme
Yerel RabbitMQ çalışırken tüketiciyi başlatıp üreticiye kısa bir metin dosyasının yolunu vermek, mesajın iki uygulama arasındaki yolunu izlemeyi sağlıyor. Üreticide kuyruğa alma mesajı görünüyor. Tüketicide ise dosya yazımı sonrasında çıktı yolu yazdırılıyor. Kuyruk durable: false ile tanımlı. Tüketici de autoAck: true kullandığı için RabbitMQ teslimatı tamamlanmış sayarken dosyaya yazma henüz gerçekleşmemiş olabilir. Bu ayrım, kuyruğa gönderim ile tüketicideki işlemin başarısının ayrı olaylar olduğunu gösteriyor.
E-posta içeriğini kuyruğa alma
Çözümde ayrı bir konsol uygulaması da var. Bu uygulama örnek alıcı, başlık ve mesaj metnini EmailTemplate içinde toplayıp mail kuyruğuna JSON olarak yayımlıyor. Akış kuyruktaki mesajla sona eriyor. Dosya örneğiyle birlikte okunduğunda iki yayınlama senaryosunu karşılaştırmak mümkün. Dosya akışı, yayınlamanın ardından mesajın tüketicide nasıl işlendiğini gösteriyor. E-posta örneğinde ise daha sonra işlenebilecek bir istek kuyruğa bırakılıyor.