RabbitMQ Nedir – Windows Ortamına Kurulumu ve .net Core Publisher – Consumer

RabbitMQ Nedir ?

   RabbitMQ bir mesaj kuyruğu sistemidir. Genel tabiriyle MessageBroker sistemidir. Publish/Subscribe(Pub/Sub) mantığı ile çalışmaktadır. RabbitMQ’yu kargo kuryesi gibi düşünün posta gelir  kurye alır ve yerine zamanında iletir. Yani kısaca görevi bir kaynaktan alınan mesajı/bilgiyi başka bir kaynağa sırası geldiğinde aktarmaktır. ( RabbitMQ FIFO prensibine göre çalışır , yani ilk giren ilk çıkar.)

RabbitMQ varsayılan olarak AMQP adlı bir protokol kullanır. RabbitMQ ile iletişim kurabilmek için RabbitMQ ile aynı protokolü anlayan bir kütüphaneye ihtiyacımız vardır.

AMQP Nedir ?

Neden Kullanmalıyız ?

Bazı işlemlerin anlık yapılmasına ihtiyaç yoktur. Örneğin sisteme yüklenen Word dosyalarının pdf e çevrilmesini istiyoruz. Bu durumda bu işlemi senkron olarak yapmak sistem kaynaklarını verimsiz kullanmaya yol açar. Bu durumda pdf e çevrilecek dosyanın bilgilerini RabbitMQ’ya publish edip ilgili consumerda işlemi yapabiliriz. Bu ve bunun gibi bir çok durumda bu sistemler imdadımıza koşmaktadır.

Bu konuyu daha iyi anlamak için aşağıdaki terimleri bilmemiz gerekir ;

Publisher
Kuyruğa mesaj gönderen uygulamadır

Consumer
Kuyruktaki mesajı dinleyecek olan uygulamadır.

Queue
Mesajların RabbitMQ tarafından eklendiği kuyruktur.

Exchange Nedir?
Exchange, Publisher’dan gelen mesajı alıp isteğe bağlı olarak Queue’ye yönlendiren sistemdir.

Exchange Tipleri Nelerdir ?

  • Direct Exchange
  • Header Exchange
  • Fanout Exchange
  • Topic Exchange

Direct Exchange
Default olan Exchange tipidir. Publish edilen mesajda gönderilen Route Key e göre mesajı ilgili kuyruklara gönderir.

Header Exchange
Routing-Key’e göre değilde mesaj ile birlikte gönderilen header da yer alan key-value tipindeki değere göre mesajı iletir. Burada önemli nokta ise x-match keyine “any” değeri verilir ise headerda gönderilen keylerden en az birisi eşleşiyor ise o kuyruğa mesajı iletir , aynı keye “any” yerine “all” değeri verilirse tüm keylerin eşleştiği kuyruğa mesajı iletecektir.

Fanout Exchange
Publisher tarafından gönderilen mesajı , kendisi ile ilgili tüm kuyruklara iletir.

Topic Exchange
Publisher tarafından gönderilen Routing-Key’in Queue’nun bind edildiği Routing Pattern’e göre eşleştirmesi ile Queue’ya iletilmesi sağlanır. Örneğin
routeKey i belirtirken “.” işaretini kullanır.. Örneğin routeKey Order.shipping.customer şeklinde verilir ve mesajın dinlendiği kısımda ise *.shipping.* şeklinde bir key verilir ve eşleşme sağlanır.

Windows 10 ortamına RabbitMQ Kurulumu

Kurulma geçmeden önce rabbitMQ için gerekli olan 2 download edeceğimiz dosyamız var ;

https://www.erlang.org/downloads
https://www.rabbitmq.com/download.html

Dosyalarımız download olduktan sonra ilk önce erlang daha sonra RabbitMQ setuplarını next-next felsefesine göre kuruyoruz.

Başarıyla kurulumu gerçekleştirdikten sonra Command Prompt’u açıp RabbitMQ nun kurulu olduğu dizin altında yer alan sbin yoluna gidiyoruz.

cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.5\sbin

Şimdi ise RabbitMQ managment plugini aktif ediyoruz;

rabbitmq-plugins enable rabbitmq_management

Bu işlemlerin sonucunda Management ekranına girebilmek için localhost’unuz üzerinden default olarak gelen “15672” portu ile http://localhost:15672 adresinden erişebilirsiniz. İlk giriş sırasında kullanıcı ve şifre kısımları default olarak “guest” değeri gelmektedir.

Login’den sonra karşınıza aşağıdaki gibi bir ekran gelecektir.

RabbitMQ – .net Core Publisher/Consumer Uygulaması.

Visual Studio 2019 üzerinden 2 adet console uygulaması açıyorum. Bunların isimleri ise Publisher ve Consumer.

2 Projem içinde Nuget üzerinden RabbitMQ.Client’ı ekliyorum.

Publisher Code ;

       static void Main(string[] args)
        {
            var messageFactory = new ConnectionFactory();
            using (var conn = messageFactory.CreateConnection())
            {
                using (var channel = conn.CreateModel())
                {
                    channel.QueueDeclare("orders", false, false, false);
                    string message = "132 nolu ürün satın alma işlemi tamamlandı";
                    var byteRequest = Encoding.UTF8.GetBytes(message);
                    channel.BasicPublish("", "orders", null, byteRequest);
                    Console.ReadLine();

                }
            }
        }

Consumer Code ;

   static void Main(string[] args)
        {
            var messageFactory = new ConnectionFactory();
            using (var conn = messageFactory.CreateConnection())
            {
                using (var channel = conn.CreateModel())
                {
                    var consumer = new EventingBasicConsumer(channel);
                    channel.BasicConsume("orders", true, consumer);
                    consumer.Received += (model, ea) =>
                    {
                        var body = ea.Body.Span;
                        var consummmedMessage = Encoding.UTF8.GetString(body);

                        Console.WriteLine(consummmedMessage);
                    };
                }
            }
            Console.ReadKey();
        }

Geldik yazımızın sonuna.RabbitMQ nedir ? Neden kullanılır ? Windows ortamına kurulumu ve basit bir şekilde .net Core uygulamalarında RabbitMQ.Client ile kullanımını gördük.

Herkese kolay gelsin.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Post comment