SEO (Arama Motoru Optimizasyonu) Mikro İnteraktif ÜCRETSİZ - Google Play'den İndirin

Asp.Net Core ile RabbitMQ Kullanım Örneği

.Net Core ile RabbitMQ mesaj kuyruklarını gönderip almayı örneklendirelim.

Bir önceki dersimizde RabbitMQ Kurulumunu incelemiştik. Şimdi ise RabbitMQ'nun .Net Core ile bir kullanım örneğini yapıp konuyu pekiştirelim. Kurulum sonrası RabbitMQ'nun çalışma adresi olarak http://localhost:15672 bildirilmişti. Dolayısıyla çalışmalarımızda RabbitMQ sunucu adresi olarak burayı göstereceğiz.
Çalışmaya başlamadan önce RabbitMQ terimlerini incelemekte fayda var.
RabbitMQ Yapısı
Asp.Net Core ile RabbitMQ Kullanım Örneği

RabbitMQ Terimleri
- Producer (Publisher): Mesajı oluşturan, gönderen veya sağlayan taraftır.
- Consumer: Abone olduğu “queue” dan veriyi alıp işleyen tüketen taraftır.
- Queue: Mesajın eklendiği ve Consumer tarafından abone olan kuyruktur.
- Exchange: Mesajı yönlendirme için aracı olarak kullanılır. Producer (Publisher) tarafından "exchance" e iletilen mesaj. Exchange type (Header attribute), binding ve routing key yardımı ile queue iletmektedir.
- Exchance Type: Mesajın hangi “queue”ya ne şekilde iletileceğini belirtir.
- Binding: Exchance ve queue arasındaki bağlantıdır.

Terimlere biraz aşina olduktan sonra iki ayrı .Net Core projesini oluşturup Visual Studio Code ile çalışmaya devam edeceğiz. Bunlardan ilki "RabbitMQProducer" (mesaj kuyruğunu oluşturup RabbitMQ'ya gönderen), ikincisi ise "RabbitMQConsumer" (mesaj kuyruğunu RabbitMQ'dan okuyup işlemi gerçekleştiren) şeklinde projelerdir.

RabbitMQ Producer (Publisher) Projesi Oluşturalım

Benim çalışma dizinim şu şekilde: "D:\calisma-masasi\dotnetcore\ornekler" şimdi bu dizine CMD (Komut satırı) ile gidip .Net Core MVC projesi oluşturalım.
RabbitMQProducer Projesini Oluşturalım
dotnet new mvc --name=RabbitMQProducer

RabbitMQ Projesi Oluşturalım
Asp.Net Core ile RabbitMQ Kullanım Örneği

Komut satırından RabbitMQProducer projemizi oluşturduk. Projeye ait ekran görüntüsünü paylaşalım.
RabbitMQProducer Proje Gösterimi
Asp.Net Core ile RabbitMQ Kullanım Örneği

Şimdi sıra geldi projemize RabbitMQ ve birkaç gerekli bağımlılıkları projeye dahil etmeye. Visual Studio Code kısmında "Terminal" > "New Terminal" seçeneği ile yeni bir terminal ile kütüphaneleri sisteme dahil edelim.
İlgili Kütüphaneleri Projemize Dahil Edelim
dotnet add package RabbitMQ.Client --version 6.2.2
dotnet add package Newtonsoft.Json --version 13.0.1
komutunu çalıştırmanız yeterli. Başka aksiyonlara girmeden oluşturmuş olduğum HomeController içerisindeki ActionResult metodu içerisinde kodları yazdım.
RabbitMQ Publisher Örnek Kodları
public IActionResult Index()
{
    List<kisiler> kisilistesi = new List<kisiler>();
    kisilistesi.Add(new kisiler { isim = "Serkan", mail = "serkan@google.com", mesaj = "Merhaba Serkan. Ödeme mevcut" });
    kisilistesi.Add(new kisiler { isim = "Ali", mail = "ali@yahoo.com", mesaj = "Merhaba Ali. Hoşgeldin" });
    kisilistesi.Add(new kisiler { isim = "Ahmed", mail = "ahmed@google.com", mesaj = "Merhaba AHmed. İyi ki doğdun" });

    ConnectionFactory cfBaglantiBilgileri = new ConnectionFactory()
    {
        HostName = "localhost",
        Port = 5672,
        UserName = "guest",
        Password = "guest"
    };

    using (var cfBaglanti = cfBaglantiBilgileri.CreateConnection())
    using (var chnKanal = cfBaglanti.CreateModel())
    {
        chnKanal.QueueDeclare
        (
            queue: "bilgilendirme-mesajlari",
            durable: false,
            exclusive: false,
            autoDelete: false,
            arguments: null
        );

        string strJson = JsonConvert.SerializeObject(kisilistesi);
        byte[] bytMesajIcerigi = Encoding.UTF8.GetBytes(strJson);

        chnKanal.BasicPublish
        (
            exchange: "",
            routingKey: "bilgilendirme-mesajlari",
            basicProperties: null,
            body: bytMesajIcerigi
        );
    }

    return View();
}

public class kisiler
{
    public string isim { get; set; }
    public string mail { get; set; }
    public string mesaj { get; set; }
}

Kodları yazdık. Sıra geldi projeyi başlatmaya. Terminalden aşağıdaki kodu yazıp çalıştırılam.
Projeyi Başlatalım
dotnet run

Kod çalıştı, RabbitMQ arayüzünde bunu kontrol edelim. Görüldüğü gibi "bilgilendirme-mesajlari" adlı mesaj kuyruğu işleme alınmış.
RabbitMQ Kuyruğunu Kontrol Edelim
Asp.Net Core ile RabbitMQ Kullanım Örneği

Göndermiş olduğumuz mesajları görmek istersek şu adımları izleyelim.
RabbitMQ Kuyruğunu Kontrol Edelim
Asp.Net Core ile RabbitMQ Kullanım Örneği

Görüldüğü üzere RabbitMQ'ya başarılı bir şekilde mesajları ulaştırdık. Şimdi ise bu mesaj kuyruğunu RabbitMQ içerisinden okumak için (yani kuyrukta bekleyen mesajları almak) yeni bir proje oluşturalım.
Producer projesini Github üzerinden indirmek için tıklayınız.

RabbitMQ Consumer Projesi Oluşturalım

Çalışma dizininize gidip CMD ekranı üzerinden yeni bir proje oluşturalım.
RabbitMQConsumer Projesi
dotnet new mvc --name=RabbitMQConsumer

RabbitMQConsumer Projesi Oluşturalım
Asp.Net Core ile RabbitMQ Kullanım Örneği

Komut satırından RabbitMQConsumer projemizi oluşturduk. Projeye ait ekran görüntüsünü paylaşalım.
RabbitMQConsumer Proje Gösterimi
Asp.Net Core ile RabbitMQ Kullanım Örneği

Önceki projedeki gibi RabbitMQ ve birkaç gerekli bağımlılıkları projeye dahil dahil edelim. Visual Studio Code kısmında "Terminal" > "New Terminal" seçeneği ile yeni bir terminal ile kütüphaneleri sisteme sırasıyla dahil edelim.
İlgili Kütüphaneleri Projemize Dahil Edelim
dotnet add package RabbitMQ.Client --version 6.2.2
dotnet add package Newtonsoft.Json --version 13.0.1

Bağımlılıklar sisteme dahil edildi. Yine varsayılan HomeController içerisindeki ActionResult içerisine kodları yazdım.
RabbitMQ Consumer Örnek Kodları
public IActionResult Index()
{
    string strKisiListesi = string.Empty;
    var cfBaglantiBilgileri = new ConnectionFactory()
    {
        HostName = "localhost",
        Port = 5672,
        UserName = "guest",
        Password = "guest"
    };

    using (IConnection cfBaglanti = cfBaglantiBilgileri.CreateConnection())
    using (IModel chnKanal = cfBaglanti.CreateModel())
    {
        chnKanal.QueueDeclare
        (
            queue: "bilgilendirme-mesajlari",
            durable: false,
            exclusive: false,
            autoDelete: false,
            arguments: null
        );

        var ebcKuyruklar = new EventingBasicConsumer(chnKanal);

        ebcKuyruklar.Received += (model, mq) =>
        {
            var MesajGovdesi = mq.Body;
            strKisiListesi = Encoding.UTF8.GetString(MesajGovdesi.ToArray());
        };

        chnKanal.BasicConsume
        (
            queue: "bilgilendirme-mesajlari",
            autoAck: false, // true ise mesaj otomatik olarak kuyruktan silinir
            consumer: ebcKuyruklar
        );
    }
    TempData["KisiListesi"] = strKisiListesi;
    return View();
}

Okuduğumuz mesaj kuyruğunu göstermek için basit bir view oluşturalım.
Index.cshtml Örneği
@{
    string strKisiler =  TempData["KisiListesi"].ToString();
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">RabbitMQConsumer Projesi</h1>
    <p>Kuyrukta bekleyen mesajları okuyalım.</p>
    <p>
        @strKisiler
    </p>
</div>

Proje her şeyi ile hazır. Çalışan haliyle bir ekranı paylaşalım.
RabbitMQConsumer Projesi Oluşturalım
Asp.Net Core ile RabbitMQ Kullanım Örneği
Consumer projesini Github üzerinden indirmek için tıklayınız.

Yorumlar

Yorum Yaz

Avatar

REKLAM

DDos Koruma, Botnet Koruma, Layer 7 Saldırı koruması, Sanal sunucu, Vds sunucu

REKLAM

Çizgi Filmler

REKLAM

Çocuk Etkinlikleri Uygulaması

EN

  • Popüler
  • Yeni
  • Son Yorum