3 min read

RabbitMQ

RabbitMQ uygulamalar arasında mesajlaşmayı sağlayan açık kaynaklı bir programdır. Bu yazıda RabbitMQ'yu inceliyoruz.
RabbitMQ

RabbitMQ kısaca söylemek gerekirse, açık kaynaklı bir mesajlaşma programıdır. Çalışmakta olan uygulamalarınız arasında mesaj gönderip alınmasını sağlayan yardımcı bir platformdur. Publish/Subscribe yani Yayınla/Abone ol mantığı üzerinden hareket eder. Bir uygulamadan yayınlanan mesajları o yayına abone olan uygulamalara taşıma görevini üstlenerek, sunucuya binen yükü azaltır.

RabbitMQ kullanımını test etmek için sisteminize kurmak zorunda değilsiniz. Docker kullanarak bir container oluşturup bunu çalıştırarak vakit kaybetmeden hemen denemeye başlayabilirsiniz.

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

Yukarıdaki komutu terminale yazarak community image'ı alıp çalıştırdığımızda, HTTP arayüzünden sistemi sade bir GUI üzerinden inceleyebiliyoruz. "guest" adı ve şifresiyle tarayıcıdan arayüze bağlanabilirsiniz.

Henüz mesajlaşma için kanal açmadığımızdan kanal, bağlantı ve sıra değerlerinin sıfır olduğunu görüyoruz.

Exchange yani yönlendirme metotları tanımlı durumda. Direkt mesaj gönderme, konu bazlı veya abonelere toplu yayın yapma gibi mesajlaşma türlerinin bulunduğunu görebiliriz.

Burada yeni bir exchange tanımlamak da mümkün. Yani kendi senaryonuzun gerektirdiği şartlara göre tamamen özel bir yönlendirme metodu oluşturup kullanabilirsiniz.

Örnek uygulama

Şimdi gelelim bu sistemin gerçek bir senaryoda uygulanmasına. Örnek senaryomuzda bir web uygulamasının başka bir uygulamaya bir emir göndermesini istiyoruz. Buna mesajlaşma sistemlerinde command message yani emir/komut mesajı adı verilir. Amacı sadece bir işi başka bir uygulamaya yaptırmaktır. Bu amaç için açılan kanala verilen komut mesajı RabbitMQ tarafından işi yapacak olan uygulamaya iletilecektir.

Dilerseniz yaptırdığınız işin sonucunu cevap olarak alabilirsiniz. Bu durumda ayrı bir cevap kanalı açılarak bu kanaldan bir document message yani dosya mesajı gönderilmesi gerekir. Bu mesaja yapılan işlemin sonucunda elde edilen veriler yazılır. Bu mesaj başta emri vermiş olan uygulamaya iletilir.

Uygulamaları çeşitli dillerde yazabilirsiniz, RabbitMQ bir çok dil ve framework'ü desteklemektedir. Bu yazıda ilk örneği c# ile yapacağız.

1.Bir Web API uygulamasına mesajlaşma ekleme

İlk olarak PlacesAPI projesini açarak temel CRUD işlemleri yapan bir REST API üzerinden çalışmaya başlıyoruz.

Projeye RabbitMQ paketi ekliyoruz.

Install-Package RabbitMQ.Client -Version 6.2.1

Burada API üzerinden bir mekan silindiği zaman, hemen bir mesaj göndererek diğer konsol uygulamasından bu durumu konsola yazmasını isteyeceğiz.

PlacesAPI uygulamasında PlacesController.DeletePlace() metodu ile bir mekanın silinmesini yukarıda görüyoruz. Bu metodun başarıyla çalışması halinde metodun bitimine mesaj gönderme kısmını eklemek istiyoruz. Bu noktada filter kavramından yararlanabiliriz.

Bir action filter, herhangi bir action'ın öncesinde veya sonrasında yapılacak bir işlem ilave edebilmemizi sağlar.

Projeye bir konsol uygulaması ekleyip RabbitMQ paketi ekliyoruz.

Devam yazısında kaldığımız yerden başlayarak uygulamanın detaylarına geçeceğiz.