RabbitMQ Message Broker Publisher Consumer Akış Şeması

RabbitMQ Kullanarak Asenkron Mail Gönderimi ve SignalR Bildirimleri

RabbitMQ, açık kaynaklı bir mesaj kuyruğu (message broker) sistemidir. Dağıtık sistemlerde, mikroservislerde ve uygulamalar arasında asenkron iletişim sağlamak için yaygın olarak kullanılır. RabbitMQ, bir mesajın üreticiden (publisher) alınıp, bir tüketiciye (consumer) iletilmesini sağlayarak sistemler arasındaki veri akışını düzenler. Bu iletişim mekanizması, uygulamalar arasındaki bağımlılığı azaltır ve yüksek verimli, güvenilir mesajlaşma sağlar.

RabbitMQ'da Mesaj Akışının Adımları

  • Message Broker (Mesaj Yöneticisi): Görselin en üst kısmında "Message Broker" olarak tanımlanan kavram, RabbitMQ'nun kendisidir. RabbitMQ, bir "mesaj yöneticisi" olarak, üreticiler (publishers) tarafından gönderilen mesajları alır ve ilgili tüketicilere (consumers) iletilmesini sağlar. Bu süreçte, mesajlar bir exchange üzerinden yönlendirilir.
  • Publisher ve Exchange: İlk adımda, bir Publisher yani mesajı gönderen taraf, belirli bir Exchange'e (mesaj yönlendirme mekanizması) mesajı publish eder. Publisher, genellikle bir sistem veya uygulamadır ve RabbitMQ'ya mesaj gönderir. RabbitMQ'nun merkezi olan Exchange, aldığı mesajları doğru kuyruklara yönlendirmekten sorumludur.
  • Routing (Yönlendirme): Exchange, mesajı doğru Queue'ya yönlendirebilmek için bir routing key kullanır. Bu anahtar, mesajın doğru hedefe yönlendirilmesi için gereklidir. Routing key, mesajın yönlendirilmesi ve kuyruğa yerleştirilmesi için önemli bir parametredir.
  • Queue: Mesaj, Exchange tarafından bir Queue'ya yönlendirilir. Queue, mesajların geçici olarak saklandığı yerdir. Burada, mesajlar, tüketici tarafından alınana kadar bekler. Kuyruğa gönderilen mesajlar, sırayla tüketicilere iletilmek üzere hazır bekler.
  • Consumer (Tüketici): Son olarak, mesaj bir Consumer yani mesajı alacak olan taraf tarafından alınır. Consumer, RabbitMQ'dan belirli bir kuyruğa abone olmuş ve mesajı tüketmeye hazır bir bileşendir. Tüketici, kuyruğa bırakılan mesajları alır, işler ve genellikle belirli bir işlem yaparak sisteme geri sonuç verir.

Bu akış, RabbitMQ'nun temel çalışma prensibini anlatmaktadır: mesajlar, üretici tarafından gönderilir, exchange üzerinden yönlendirilir, bir kuyruğa bırakılır ve nihayetinde tüketici tarafından alınır. Bu süreç, sistemler arasında yüksek verimlilikle veri iletimini sağlar.

RabbitMQ Web Arayüzünü Etkinleştirme

RabbitMQ, bize bir web tabanlı arayüz sunar. Bu arayüzü etkinleştirmeli ve kullanılabilir hale getirmeliyiz.

RabbitMQ Web Yönetim Paneli Arayüzü ve Sunucu İstatistikleri

RabbitMQ arayüzü başarıyla etkinleştirilecek ve 15672 numaralı portta çalışacaktır. (localhost:15672)

Ana Sayfa Tanıtımı

localhost:15672 adresini açtığınızda, ilk olarak bir giriş sayfası ile karşılaşacaksınız.

RabbitMQ Yönetim Paneli Giriş Ekranı ve Kullanıcı Giriş Formu

Burada, "Kullanıcı Adı" ve "Parola" alanlarına 'guest' değerini yazmak yeterlidir.

RabbitMQ Queues Sekmesi: Aktif Mesaj Kuyrukları ve Durum İzleme Ekranı

Giriş yaptıktan sonra, RabbitMQ sunucusunun genel bakış sayfasında aşağıdaki bölümleri görürüz:

  • Connections: Bu bölümde, RabbitMQ sunucusuna yapılan aktif bağlantıları görebilirsiniz. Burada, sunucuya bağlı olan tüm istemciler ve bunların bağlantı bilgileri listelenir. Her bağlantının durumu ve bağlantıya dair detaylar yer alır.
  • Channels: RabbitMQ'da her bir bağlantı, bir veya daha fazla kanal (channel) üzerinden iletişim kurar. Bu bölümde, aktif olarak kullanılan tüm kanalların bilgilerini görebilir ve her kanalın durumunu inceleyebilirsiniz. Kanallar, mesaj iletimi ve alımı için önemli bir yapı taşır.
  • Exchanges: Exchange, RabbitMQ'da mesajların yönlendirildiği yapıdır. Bu bölümde, sistemdeki tüm exchange'lerin listesine ulaşabilirsiniz. Exchange'ler, mesajları doğru kuyruğa yönlendiren bileşenlerdir. Farklı türde exchange'ler bulunur, örneğin Direct, Topic, Fanout ve Headers.
  • Queues: Bu bölümde, RabbitMQ sunucusunda oluşturulmuş tüm kuyrukları görmeniz mümkündür. Kuyruklar, mesajların geçici olarak depolandığı ve tüketicilere iletildiği yapılar olup, her bir kuyruğun durumu (boş, dolu vb.) hakkında bilgi sağlar.
  • Admin: Son olarak, bu bölümde sistemdeki tüm yöneticilerin giriş bilgilerini ve yönetici haklarına sahip kullanıcıları görebilirsiniz. Admin paneli, RabbitMQ'nun yönetimi için gerekli tüm araçları sunar.

RabbitMQ - CloudAMQP

CloudAMQP Panel: Bulut Tabanlı RabbitMQ Managed Service Arayüzü

CloudAMQP hizmeti, RabbitMQ'nun bulut ortamında kullanılabilmesi için geliştirilmiş bir servistir. Bu hizmete erişebilmek için öncelikle www.cloudamqp.com adresine giderek siteye giriş yapmanız gerekmektedir.

CloudAMQP , RabbitMQ'nun sağladığı tüm mesajlaşma altyapısını bulut üzerinde sunarak, yerel sunucularda kurulum ve yönetim ile uğraşmadan RabbitMQ'yu kullanmanıza olanak tanır. Bu hizmet, özellikle RabbitMQ'yu hızlı bir şekilde test etmek veya üretim ortamlarında kullanmak isteyenler için pratik bir çözümdür. CloudAMQP, çeşitli fiyatlandırma planlarıyla, kullanıcıların ihtiyaçlarına uygun ölçeklenebilir bir çözüm sunar.

Bağlantı İçin AMQP URL'si Almak

CloudAMQP AMQP URL ve Bağlantı Bilgileri (Connection String) Ekranı

CloudAMQP üzerinden AMQP bağlantı URL'si almak için şu adımları izleyebilirsin:

  • CloudAMQP Hesabına Giriş Yap: İlk olarak CloudAMQP hesabına giriş yapman gerekiyor. Hesabına giriş yaptıktan sonra, kullanmak istediğin RabbitMQ instance'ını seç.
  • Instance Seçimi ve Detaylar: Instance'ı seçtikten sonra, o instance'ın yönetim paneline gireceksin. Bu panele, örneğin "Details" veya "Dashboard" sekmesinden ulaşabilirsin.
  • AMQP URL'sini Bul: Instance yönetim panelinde, genellikle "Details" (Detaylar) sekmesi altında "AMQP URL", "Hosts" veya "Connection Info" gibi alanlar bulunur. Burada, bağlantı için gerekli URL'yi görebilirsin.

CloudAMQP URL Bileşenleri:

  • user: RabbitMQ kullanıcınızın adı. Bu, CloudAMQP panelinde belirtilir.
  • password: Kullanıcı adı için belirlediğiniz şifre.
  • hostname: RabbitMQ sunucusunun adresi. CloudAMQP panelindeki "Hosts" kısmında bulunan IP adresi veya domain adı.
  • vhost: RabbitMQ'nun sanal host adı. Bu da CloudAMQP panelinde "Virtual Hosts" veya "vhost" altında belirtilir.

CloudAMQP panelinden bu bilgileri aldıktan sonra, bağlantı URL'nizi şu formatta oluşturabilirsiniz:

RabbitMQ AMQP Bağlantı URL Yapısı: User, Password, Hostname ve Vhost Formatı

Bu bağlantıyı .NET üzerinde kullanmak için aşağıdaki adımları izleyebilirsiniz:

1. CloudAMQP'den Bağlantı URL'sini Al

CloudAMQP panelinde, oluşturduğunuz instance'ın "Details" sekmesinde, AMQP URL'sini bulabilirsiniz. Bu URL genellikle şu şekilde olacaktır:

CloudAMQP Panelinden Alınan Örnek RabbitMQ AMQP URL Adresi

Bu bilgileri, CloudAMQP panelinden alacağınız kullanıcı adı, şifre, sunucu adresi (hostname), ve vhost'la değiştireceksiniz.

2. NET'te Bağlantıyı Kurmak

CloudAMQP bağlantı URL'sini .NET uygulamanızda kullanarak RabbitMQ'ya bağlanmak için RabbitMQ.Client kütüphanesini kullanabilirsiniz. Aşağıda .NET ile CloudAMQP üzerinden RabbitMQ'ya bağlanmak için örnek bir kod bulunmaktadır:

.NET C# ile RabbitMQ Bağlantısı ve ConnectionFactory Kullanımı Kod Örneği

3. Bağlantı Parametrelerinin Açıklamaları:

  • user: CloudAMQP panelinden aldığınız kullanıcı adı.
  • password: CloudAMQP panelinde oluşturduğunuz şifre.
  • hostname: CloudAMQP üzerinde verilen RabbitMQ sunucusunun adresi (IP veya domain adı).
  • vhost: CloudAMQP üzerinde belirlediğiniz sanal host (vhost) adı.

Örnek bir URL şöyle görünebilir:

CloudAMQP Üzerinde Yapılandırılmış RabbitMQ Instance Detayları

4. Bağlantıyı Yapılandırma:

  • ConnectionFactory: Bu sınıf, AMQP URL'si üzerinden RabbitMQ sunucusuna bağlanmanıza yardımcı olur. Uri özelliğini kullanarak bağlantı URL'sini belirtiyoruz.
  • Kuyruk (Queue) Oluşturma: QueueDeclare metodu ile bir kuyruk oluşturuyoruz. Burada belirttiğiniz kuyruk adıyla (örneğin "hello") mesajları gönderebiliriz.
  • Mesaj Gönderme: BasicPublish metodu ile kuyruk üzerine mesaj gönderiyoruz.

5. Hata Kontrolü ve Bağlantı Sorunları:

Eğer bağlantı kurmada sorun yaşarsanız, şu adımları kontrol edebilirsiniz:

  • AMQP URL'sinin doğru olduğundan emin olun. Kullanıcı adı, şifre, host adresi ve vhost bilgilerini kontrol edin.
  • CloudAMQP panelinde "Hosts" bölümünde belirtilen sunucu adresi doğru olmalıdır.
  • RabbitMQ sunucusuna ağ üzerinden erişiminizin olduğundan emin olun (özellikle güvenlik duvarı ve ağ engellemeleri için).

Bu adımlarla, CloudAMQP üzerinden RabbitMQ bağlantınızı .NET uygulamanızda başarılı bir şekilde gerçekleştirebilirsiniz.

RabbitMQ - Docker

RabbitMQ'yu Docker üzerinde çalıştırmak ve yönetmek için kullanılan komutlardır. Her bir komutun anlamını ve nasıl çalıştığını açıklayayım:

1. brew services start rabbitmq

  • Bu komut Homebrew paket yöneticisini kullanarak RabbitMQ'yu bir macOS sisteminde başlatır.
  • Homebrew macOS üzerinde yazılımların kolayca yüklenmesini ve yönetilmesini sağlayan bir araçtır.
  • Eğer RabbitMQ Homebrew üzerinden yüklenmişse, bu komut RabbitMQ servisini başlatır.
  • Eğer Docker kullanıyorsanız, bu komut gerekli olmayabilir çünkü Docker üzerinden RabbitMQ çalıştırılıyor olacak.

2. docker start

  • Bu komut, Docker üzerinde daha önce oluşturulmuş ve durdurulmuş bir konteyneri başlatır.
  • Bu komut tek başına kullanıldığında, hangi konteynerin başlatılacağını belirtmeniz gerekir. Örneğin, şunu kullanmak gereklidir:
  • docker start rabbitmqcontainer

Bu komut, rabbitmqcontainer adlı bir konteyneri başlatır.

3. docker pull rabbitmq:management

  • Bu komut, Docker'dan RabbitMQ'nun "management" sürümünü çeker.
  • rabbitmq:management imajı, RabbitMQ'nun temel sürümüne ek olarak bir Web Management Console içeren bir Docker imajıdır. Bu konsol, RabbitMQ'yu web tarayıcısı üzerinden yönetmek için kullanılır (genellikle http://localhost:15672 adresinden erişilir).
  • docker pull komutu, belirtilen Docker imajını Docker Hub'dan indirir. İmajda eksik dosya varsa, Docker otomatik olarak indirir.

docker run -d -p 1453:15672 -p 5672:5672 --name rabbitmqcontainer rabbitmq:3-management

Bu komut Docker konteyneri başlatmak için kullanılır. Her parametrenin anlamı şudur:

  • docker run: Yeni bir Docker konteyneri başlatma komutudur.
  • -d: Bu, konteynerin arka planda (detached mode) çalışmasını sağlar. Konteyner arka planda çalışırken terminali serbest bırakır.
  • -p 1453:15672: Bu, Docker konteynerindeki 15672 numaralı portu (RabbitMQ'nun web yönetim konsolunun portu) host makinesindeki 1453 numaralı portla ilişkilendirir. Yani, RabbitMQ'nun yönetim paneline http://localhost:1453 adresinden erişebilirsiniz.
  • -p 5672:5672: Bu, RabbitMQ'nun AMQP (Advanced Message Queuing Protocol) protokolünü kullanan 5672 numaralı portunu host makinenizde de aynı port numarasına yönlendirir. Bu, RabbitMQ'ya bağlantı kurmak için kullanılan porttur.
  • --name rabbitmqcontainer: Konteynere bir isim verir. Burada konteynerin ismi rabbitmqcontainer olarak belirlenmiştir. Bu isim, Docker'da konteyneri tanımlamak ve yönetmek için kullanılır.
  • rabbitmq:3-management: Çekilen Docker imajını belirtir. Bu imaj, RabbitMQ'nun 3.x sürümünü ve yönetim panelini içerir.

ÖZET

  • brew services start rabbitmq: Homebrew ile RabbitMQ'yu başlatır (macOS için).
  • docker start: Durdurulmuş bir Docker konteynerini başlatır (spesifik bir konteyner ismi ile kullanılır).
  • docker pull rabbitmq:management: RabbitMQ'nun yönetim paneline sahip olan Docker imajını çeker.
  • docker run -d -p 1453:15672 -p 5672:5672 --name rabbitmqcontainer rabbitmq:3-management: RabbitMQ'yu bir Docker konteynerinde başlatır ve yönetim panelini http://localhost:1453 adresinden erişilebilir hale getirir.

Kullanım Senaryosu

  • Docker üzerinden RabbitMQ'yu çalıştırmak için docker run komutunu kullanarak RabbitMQ'nun web yönetim paneline ve AMQP protokolüne erişim sağlarsınız.
  • RabbitMQ'nun web yönetim paneline tarayıcı üzerinden http://localhost:1453 adresinden erişebilir ve RabbitMQ'yu görsel arayüz üzerinden yönetebilirsiniz.
  • AMQP protokolü üzerinden RabbitMQ'ya bağlanmak için ise 5672 numaralı portu kullanabilirsiniz.

EXCHANGE

RabbitMQ'da exchange (değişim), mesajları doğru kuyruklara yönlendirmek için kullanılan bir yapıdır. Exchange'ler, mesajları belirli bir mantığa göre (routing key, binding vs.) bir veya daha fazla kuyruğa yönlendirir. RabbitMQ'da farklı türde exchange'ler bulunur ve her biri farklı yönlendirme mantıkları sunar.

RabbitMQ Exchange Mimarisi: Mesajların Kuyruklara Yönlendirilme Mantığı Şeması

1. Default Exchange (Varsayılan Exchange)

RabbitMQ'daki default exchange, ad-hoc (yani doğrudan) yönlendirme yapabilmek için kullanılan özel bir exchange türüdür. Bu exchange türü, herhangi bir özel türde yönlendirme mantığı kullanmaz. Bunun yerine, mesajlar doğrudan kuyruğa gönderilir.

Default Exchange Özellikleri:

  • Ad-hoc Yönlendirme: Mesaj, doğrudan belirli bir kuyruga yönlendirilir.
  • Adı: Default exchange'in adı boş bir stringtir, yani bu exchange'in adı yoktur. Onun yerine, "" (boş string) kullanılır.
  • Routing Key: Mesajlar, routing key kullanılarak doğrudan bir kuyruga yönlendirilir. Bu, kuyrukla exchange arasında bir binding (bağlantı) olduğu sürece geçerlidir.
  • Binding (Bağlantı): Default exchange, doğrudan kuyruk isimlerine bağlıdır. Yani, kuyruklar exchange'e "" adı ile bağlanabilirler.

Default Exchange'in Çalışma Mantığı:

  • Default exchange direct exchange türündedir, ancak herhangi bir filtreleme veya yönlendirme mantığı kullanmaz. Yani, bir kuyruk, default exchange'e bağlandığında, bu kuyruk doğrudan routing key ile eşleşen her mesajı alır.
  • Routing Key Mesaj gönderildiğinde, routing key kuyruk adıyla aynı olmalıdır. Mesaj, belirttiğiniz kuyruk adına tam eşleşen bir routing key ile gönderilirse, bu kuyruk mesajı alır.

ÖRNEK

Bir kuyruk oluşturduğumuzda ve default exchange'e bağladığımızda, routing key değeri kuyruk ismiyle birebir eşleşmelidir.

RabbitMQ Routing Key Çalışma Mantığı ve Kuyruk Eşleştirme Şeması

Bu durumda, eğer bir mesaj şu routing key ile gönderilirse:

RabbitMQ Mesaj Yönlendirme Örneği: Routing Key ile Spesifik Kuyruk Eşleşmesi

Mesaj my_queue kuyruguna doğrudan yönlendirilir.

Default Exchange Kullanım Senaryosu:

  • Basit bağlantılar: Eğer sadece bir kuyruk oluşturup, belirli bir mesajı doğrudan bu kuyruğa yönlendirmek istiyorsanız, default exchange oldukça kullanışlıdır. Ekstra bir yönlendirme mantığına gerek yoktur.
  • Tek bir kuyruk kullanımı: Küçük, basit sistemlerde veya RabbitMQ'yu test etmek için default exchange doğrudan kuyruklara mesaj göndermek için kullanılabilir.

Avantajlar:

  • Kolay kullanım: Yönlendirme mantığı olmadan, sadece kuyruk adını kullanarak mesaj gönderebilirsiniz.
  • Yüksek verimlilik: Gereksiz yönlendirme mantığına gerek yoktur; mesajlar doğrudan iletilir.

Dezavantajlar:

  • Esneklik eksikliği: Eğer mesajları daha karmaşık mantıklarla yönlendirmek isterseniz, örneğin birkaç kuyruk arasında farklı türlerde dağıtım yapmayı, daha esnek bir exchange türüne ihtiyacınız olur (örneğin, topic veya fanout exchange).

2. Fanout Exchange(Yayıcı Exchange)

Fanout Exchange RabbitMQ'da bir exchange türüdür ve mesajları tüm bağlı kuyruklara iletmek için kullanılır. Fanout exchange, routing key'i dikkate almaz ve mesajları tüm bağlı kuyruklara eşit bir şekilde dağıtarak yönlendirir. Bu tür bir exchange, genellikle tüm abonelere aynı mesajı göndermek amacıyla kullanılır.

RabbitMQ Fanout Exchange Çalışma Mantığı: Mesajların Tüm Kuyruklara Yayın (Broadcast) Edilmesi

Fanout Exchange Özellikleri:

  • Mesajların Dağıtılması: Fanout exchange, kendisine bağlı tüm kuyruklara mesajları iletir. Routing key'e bakmaz. Yani, mesajın routing key değeri önemli değildir.
  • Yüksek Eşzamanlılık: Bu, tüm bağlı kuyruklara aynı mesajı gönderdiği için, yayın (broadcast) benzeri bir yapıdır.
  • Bağlantılar: Bir kuyruk fanout exchange ile bağlandığında, exchange'in göndereceği her mesaj o kuyruğa gider. Birden fazla kuyruk, aynı exchange'e bağlanabilir.
  • Esneklik: Fanout exchange, herhangi bir yönlendirme mantığına sahip olmadığı için mesajların hızlı ve eşit şekilde dağıtılmasını sağlar.

Fanout Exchange'in Çalışma Mantığı:

  • Mesajlar Tüm Kuyruklara Gitmektedir: Fanout exchange'e bağlı her kuyruk, exchange'den gelen mesajı alır. Bu, tıpkı bir "broadcast" (yayın) işlemine benzer.
  • Routing Key'ine Bağlı Değildir: Routing key, fanout exchange için geçerli değildir. Bir mesajın hangi kuyruğa gitmesi gerektiği, sadece kuyrukların exchange'e bağlı olup olmalarıyla ilgilidir.
  • Yüksek Performans: Bu tür exchange, aynı mesajı birden fazla kuyruk ile paylaşmak istediğinizde son derece verimlidir.

Fanout Exchange ile Mesaj Yönlendirme

Mesaj, fanout exchange'e gönderildiğinde, bu mesaj tüm bağlı kuyruğa yönlendirilir. Fanout exchange'in bağlantı kurma mantığı oldukça basittir:

  • Bağlantılı tüm kuyruklara aynı mesajı gönderir.
  • Mesajı hangi kuyruğa göndereceğinizin hiçbir önemi yoktur, çünkü routing key kullanımı söz konusu değildir.

3. Fanout Exchange Kullanım Senaryosu

  • Yayın (Broadcast) Sistemleri: Birden fazla abonelere aynı mesajı iletmek için kullanılır. Örneğin, birden fazla servis veya mikroservis aynı bilgiyi almak zorundaysa, fanout exchange bu durumu kolaylaştırır.
  • Log veya Event Yönlendirme: Tüm logların veya olayların farklı sistemlere dağıtılması gerektiğinde kullanılabilir.
  • Çoklu Abone Modelleri: Bir mesajın birden fazla alıcıya gönderilmesi gerektiğinde ideal bir seçimdir.

ÖRNEK

Bir fanout exchange kurarak, bu exchange'e bağlı olan iki kuyrukla mesajlar yayınlamak istiyoruz.

Adım 1: Fanout Exchange Oluşturma

Öncelikle bir fanout exchange oluşturmalıyız. Bunu RabbitMQ komut satırından veya RabbitMQ yönetim panelinden yapabiliriz. Örnek bir komutla fanout exchange oluşturabiliriz:

RabbitMQ Yönetim Panelinde Yeni Bir Fanout Exchange Oluşturma Adımı

Burada, my_fanout_exchange adında bir fanout exchange oluşturuyoruz. fanout türü, exchange'in türünü belirtir.

Adım 2: Kuyrukları Oluşturma

Sonrasında, bu exchange'e bağlanacak kuyrukları oluşturmalıyız:

RabbitMQ Yönetim Panelinde Yeni Mesaj Kuyrukları (Queues) Oluşturma Ekranı

Bu komutlar, queue1 ve queue2 adlı iki kuyruk oluşturur.

Adım 3: Kuyrukları Fanout Exchange'e Bağlama

Şimdi, queue1 ve queue2 kuyruklarını, oluşturduğumuz fanout exchange'e bağlayacağız. Her iki kuyruk da aynı mesajları alacak.

RabbitMQ Binding İşlemi: Kuyrukların Fanout Exchange'e Bağlanması ve Yapılandırılması

Bu adımda, her iki kuyruk da my_fanout_exchange adlı fanout exchange'ine bağlanıyor. Buradaki routing key boş bir string ("") olmalıdır, çünkü fanout exchange routing key'i dikkate almaz.

Adım 4: Mesaj Gönderme

RabbitMQ Fanout Exchange Üzerinden Mesaj Yayınlama (Publish Message) Ekranı

Bu mesaj, my_fanout_exchange exchange'ine gönderilir. Bu exchange, queue1 ve queue2 adlı iki kuyruğa da aynı mesajı gönderecektir.

Adım 5: Kuyruklardaki Mesajları Görüntüleme

Son olarak, queue1 ve queue2 kuyruklarındaki mesajları görüntüleyebiliriz. Her iki kuyruk, gönderdiğimiz mesajı alacaktır.

RabbitMQ Kuyruk İzleme: Fanout Exchange ile Mesajın Tüm Kuyruklara Ulaştığının Doğrulanması

4. Fanout Exchange'in Avantajları ve Dezavantajları

Avantajlar:

  • Mesajların Yayılması: Bir mesajı birden fazla kuyrukla kolayca paylaşabilirsiniz.
  • Basit Yapı: Fanout exchange'in yapılandırılması çok basittir; routing key kullanmadığı için işlem hızlıdır.
  • Kullanım Alanı: Çeşitli sistemlerde (örneğin, log yayılımı veya bildirimler) geniş bir kullanım alanı vardır.

Dezavantajlar:

  • Esneklik Eksikliği: Mesajlar tüm kuyruklara gitmektedir ve routing key kullanılmadığı için mesajları belirli bir kuyrukta yönlendiremezsiniz. Bu, bazı durumlarda esneklik kaybına neden olabilir.
  • Yüksek Mesaj Dağıtımı: Mesajların tüm kuyruklara gitmesi, çok sayıda abone olduğunda yoğun bir trafik oluşturabilir.

3. Direct Exchange

Direct Exchange, RabbitMQ'daki en temel exchange türlerinden birisidir. Bu tür exchange, bir routing key kullanarak mesajları doğru kuyruğa yönlendirmek için kullanılır. Routing key, mesajın hangi kuyruğa gitmesi gerektiğini belirler. Direct exchange, yönlendirme işlemini tam eşleşme (exact match) temeline dayalı olarak yapar.

RabbitMQ Direct Exchange Mimarisi: Routing Key ile Noktadan Noktaya Mesaj Yönlendirme Şeması

Direct Exchange Özellikleri:

  • Routing Key Kullanımı: Mesajlar, routing key kullanılarak belirli bir kuyruğa yönlendirilir. Yani, mesajın routing key değeri ile kuyrukların bağlı olduğu exchange üzerinde belirttiğiniz routing key değerinin tam eşleşmesi gerekir.
  • Tam Eşleşme Yönlendirme: Eğer bir kuyruk, belirli bir routing key ile direct exchange'e bağlanmışsa, o kuyruğa yalnızca bu routing key ile gelen mesajlar yönlendirilir.
  • Sade ve Esnek: Direct exchange, mesajları yalnızca bir kuyruğa yönlendirmek için kullanılır ve oldukça esnektir. Çok sayıda kuyrukla bağlantı kurulabilir, ancak her kuyruk yalnızca kendisine ait routing key ile gelen mesajları alır.

Direct Exchange'in Çalışma Mantığı:

  • Direct exchange'e mesaj gönderildiğinde, routing key belirlenir. Bu routing key, bir kuyrukla tam olarak eşleşmelidir.
  • Her kuyruk, bir veya daha fazla routing key ile bağlanabilir. Bu bağlama işlemi binding adıyla bilinir.
  • Mesaj, belirli bir routing key ile gönderildiğinde, yalnızca bu key'e bağlı kuyruklar mesajı alır.

Direct Exchange ile Mesaj Yönlendirme:

Direct exchange, routing key'e dayalı olarak mesajları tam eşleşme mantığıyla yönlendirir. Yani, bir kuyruk belirli bir routing key ile bağlandığında, sadece o routing key ile gelen mesajlar bu kuyruğa gider.

4. Direct Exchange Kullanım Senaryosu

Direct exchange, genellikle şu durumlar için kullanılır:

  • Özel Yönlendirmeler: Mesajın yalnızca belirli bir kuyrukla ilgili olduğu durumlar.
  • Durum ve hata raporları: Farklı servislerin sadece kendi hata raporlarını almak istediği durumlar.
  • Mesaj Filtreleme: Aynı mesajın farklı yönlere gitmesi istenirse, ancak sadece belirli anahtarlarla (routing key) yönlendirilmesi isteniyorsa.

Örnek:

Bir direct exchange kurarak, mesajların belirli kuyruklara yönlendirilmesini sağlamak istiyoruz. Burada, routing key ile kuyrukların eşleşmesini sağlarız.

Adım 1: Direct Exchange Oluşturma

Öncelikle bir direct exchange oluşturmalıyız. Bunu RabbitMQ komut satırından veya yönetim panelinden yapabiliriz. Örnek bir komutla direct exchange oluşturabiliriz:

RabbitMQ Yönetim Panelinde Direct Exchange Tanımlama ve Oluşturma Ekranı

Bu komutla my_direct_exchange adında bir direct exchange oluşturuyoruz. direct türü, bu exchange'in türünü belirtir.

Adım 2: Kuyrukları Oluşturma

Şimdi, bu exchange'e bağlı olacak kuyrukları oluşturalım:

Direct Exchange Binding: Kuyrukları Belirli Routing Key Değerleri ile Exchange'e Bağlama

Bu komutlar ile queue1 ve queue2 adlı kuyruklar oluşturuluyor.

Adım 3: Kuyrukları Exchange'e Bağlama

Şimdi, her kuyruk için bir routing key belirleyerek, bu kuyrukları exchange'e bağlayacağız. Örneğin, queue1 için key1, queue2 için key2 routing key'ini belirleyelim.

Direct Exchange ile Mesaj Yayınlama: Belirli bir Routing Key Kullanarak Hedefli Mesaj Gönderimi

Bu adımda, queue1 ve queue2 kuyrukları, my_direct_exchange exchange'ine key1 ve key2 routing key'leri ile bağlanıyor.

Adım 4: Mesaj Gönderme

Artık mesaj göndermeye hazırız. Şimdi, key1 routing key'i ile bir mesaj gönderelim. Bu mesaj yalnızca queue1 kuyruğuna gidecektir.

RabbitMQ Direct Exchange Sonucu: Mesajın Sadece Eşleşen Routing Key Kuyruğuna İletilme Doğrulaması

Bu komut, my_direct_exchange exchange'ine key1 routing key'i ile bir mesaj gönderir. Bu mesaj yalnızca queue1 kuyruğuna yönlendirilir çünkü queue1 sadece key1 routing key'i ile bağlanmıştır.

Eğer key2 ile mesaj gönderirsek, mesaj sadece queue2 kuyruğuna gider:

RabbitMQ Kuyruk İçeriği: Direct Exchange Üzerinden Gelen Mesajın Payload ve Detay Görünümü

Bu durumda, queue2 kuyruğuna key2 routing key'i ile gönderilen mesaj gider.

Adım 5: Kuyruklardaki Mesajları Görüntüleme

Son olarak, queue1 ve queue2 kuyruklarındaki mesajları görüntüleyebiliriz. Mesajlar yalnızca doğru routing key ile bağlı kuyruğa yönlendirilmiştir.

RabbitMQ Kuyruk Detayları: Direct Exchange ile İletilen Mesajın Özellikleri ve Payload Analizi

5. Direct Exchange'in Avantajları ve Dezavantajları

Avantajlar:

  • Esneklik: Direct exchange ile her kuyruk, belirli bir routing key ile eşleşen mesajları alır. Bu esneklik, mesajları doğru hedefe yönlendirmek için çok faydalıdır.
  • Basit Yönlendirme: Mesajlar, routing key kullanılarak kolayca yönlendirilir. Yönlendirme mantığı basit ve anlaşılırdır.
  • Eşleşme Temelli Yönlendirme: Mesajların sadece tam eşleşen kuyruklara gitmesi sağlanabilir. Bu, belirli kuyruklara sadece ilgili mesajların gitmesini sağlar.

Dezavantajlar:

  • Yönlendirme Mantığı Kısıtlıdır: Mesaj sadece belirli bir routing key ile iletilir, bu da daha karmaşık yönlendirme mantıkları için yetersiz olabilir.
  • Tek Yönlü Yönlendirme: Direct exchange, yalnızca tek yönlü ve tam eşleşme mantığıyla çalışır. Mesajın farklı yollarla dağıtılması gerektiğinde, başka exchange türleri tercih edilebilir.

4. Topic Exchange

Topic Exchange, RabbitMQ'daki dördüncü exchange türüdür ve daha esnek bir mesaj yönlendirme sağlar. Topic Exchange, mesajları bir routing key'e dayalı olarak yönlendirir, ancak bu yönlendirme yalnızca tam eşleşme değil, aynı zamanda desen eşleşmesi (pattern matching) temellidir.

RabbitMQ Topic Exchange Mimarisi: Joker Karakterler (* ve #) ile Desen Bazlı Mesaj Yönlendirme Şeması

Adım 1: Topic Exchange Oluşturma

Öncelikle bir topic exchange oluşturmalıyız. Bunu RabbitMQ komut satırından veya yönetim panelinden yapabiliriz. Örnek bir komutla topic exchange oluşturabiliriz:

RabbitMQ Yönetim Arayüzünde Topic Exchange Tanımlama ve Oluşturma İşlemi

Bu komutla my_topic_exchange adında bir topic exchange oluşturuyoruz. topic türü, exchange'in türünü belirtir.

Adım 2: Kuyrukları Oluşturma

Şimdi, bu exchange'e bağlanacak kuyrukları oluşturalım. Örnek olarak, queue1 ve queue2 adlı iki kuyruk oluşturalım:

RabbitMQ Topic Exchange Binding: Joker Karakterler ile Kuyruk ve Pattern Eşleştirmesi

Bu komutlarla queue1 ve queue2 kuyrukları oluşturuluyor.

Adım 3: Kuyrukları Topic Exchange'e Bağlama

Bu adımda, her bir kuyruk için bir routing key desenine göre bağlama işlemi yapacağız. Örneğin, queue1 için animal.dog ve queue2 için animal.* routing key desenleri belirleyelim.

RabbitMQ Topic Exchange Mesaj Yayınlama: Noktalı Routing Key Yapısı ile Mesaj Gönderimi
  • queue1 sadece animal.dog routing key'ine sahip mesajları alacak.
  • queue2 ise animal kategorisindeki tüm mesajları alacak, çünkü animal.* desenine uygun olan tüm mesajlar bu kuyruğa yönlendirilecektir.

Adım 4: Mesaj Gönderme

Şimdi, topic exchange'e bir mesaj gönderelim.

animal.dog u mesaj yalnızca queue1 kuyruğuna gider çünkü queue1 yalnızca bu key'i kabul ediyor.

RabbitMQ Topic Exchange Sonuçları: Desen Eşleşmesine Göre Mesajların Kuyruklara Dağılım Grafiği

animal.cat routing key'i ile bir mesaj gönderelim. Bu mesaj queue2 kuyruğuna gider çünkü queue2 animal.* desenine uyuyor.

RabbitMQ Topic Exchange Testi: Kuyruğa Düşen Mesajın Payload ve Routing Key Detay Analizi

animal.dog.shepherd routing key'i ile bir mesaj gönderelim. Bu mesaj da queue2 kuyruğuna gider çünkü queue2 animal.* desenine uyuyor.

RabbitMQ Topic Exchange Doğrulaması: Çoklu Routing Key ve Kuyruk Eşleşme Sonuçları

Adım 5: Kuyruklardaki Mesajları Görüntüleme

Son olarak, queue1 ve queue2 kuyruklarındaki mesajları görüntüleyebiliriz. Mesajlar yalnızca uygun routing key ile bağlı kuyruklara yönlendirilmiştir.

RabbitMQ Mesaj Detayları: Topic Exchange ile İletilen Verinin Payload ve Meta Bilgilerinin İncelenmesi

Bu komutla kuyruklar ve içerikleri kontrol edilebilir.

6. Topic Exchange'in Avantajları ve Dezavantajları

Avantajlar:

  • Esneklik: Mesajları belirli desenlere göre yönlendirme esnekliği sağlar. Routing key desenleri, mesajları çok çeşitli kriterlere göre yönlendirmek için idealdir.
  • Çoklu Abone Sistemi: Birden fazla kuyruk aynı exchange'e bağlı olabilir ve her kuyruk yalnızca belirli bir desenle eşleşen mesajları alır.
  • Desen Eşleşmesi: Wildcard karakterleri (* ve #) ile çok daha esnek ve güçlü yönlendirme kuralları yazılabilir.

Dezavantajlar:

  • Karmaşıklık: Topic exchange'in esnekliği, bazen konfigürasyonu karmaşık hale getirebilir. Özellikle birçok wildcard karakteri kullanıldığında, mesajların hangi kuyruğa yönlendirileceğini anlamak zorlaşabilir.
  • Performans: Wildcard karakterleri çok sık kullanıldığında, yönlendirme işlemi daha karmaşık hale gelebilir ve bu da performans üzerinde bir etki yaratabilir.

5. Header Exchange

Header Exchange, RabbitMQ'daki beşinci exchange türüdür ve mesaj yönlendirme işlemini message header (mesaj başlıkları) üzerinden gerçekleştirir. Bu tür exchange, routing key kullanmak yerine mesaj başlıklarındaki (header) anahtar-değer çiftlerine göre yönlendirme yapar. Header Exchange, daha karmaşık yönlendirme ihtiyaçlarını karşılamak için kullanılabilir.

RabbitMQ Headers Exchange Mimarisi: Header Parametreleri ile Mesaj Yönlendirme Şeması

Header Exchange Özellikleri:

  • Mesaj Başlıkları Kullanılır: Mesajın yönlendirilmesinde routing key yerine, mesaj başlıklarında bulunan anahtar-değer çiftleri kullanılır.
  • Tam veya Kısmi Eşleşme: Mesajlar, başlıklarındaki anahtar-değer çiftlerine göre tam eşleşme veya kısmi eşleşme ile yönlendirilir. Her kuyruk, başlıklarındaki belirli anahtar-değer çiftleri ile eşleşen mesajları alır.
  • Yüksek Esneklik: Header exchange ile mesajlar çok daha esnek bir şekilde yönlendirilebilir. Örneğin, birden fazla başlık parametresiyle AND veya OR koşulları kullanarak yönlendirme yapılabilir.

Header Exchange'in Çalışma Mantığı:

Header exchange, mesajların header (başlık) kısmındaki anahtar-değer çiftlerine göre yönlendirme yapar. Her bir kuyruk, belirli başlık parametrelerine sahip mesajları almak üzere konfigüre edilebilir.

  • Anahtar-Değer Eşleşmesi: Mesajlar, header bölümünde bulunan anahtar-değer çiftleriyle eşleştirilir. Örneğin, mesajda "color": "red" şeklinde bir anahtar-değer çifti bulunuyorsa, bu başlıkta "color" anahtarına "red" değerini taşıyan mesajlar yalnızca bu değeri bekleyen kuyruğa yönlendirilir.
  • Tam veya Kısmi Eşleşme: Header exchange, başlıkta verilen tüm parametrelerin eşleşip eşleşmediğini kontrol eder ve bu şekilde mesajları doğru kuyruklara yönlendirir. Eğer tüm anahtarlar eşleşirse, mesaj doğru kuyruğa gönderilir.

Header Exchange ile Mesaj Yönlendirme:

Mesajlar, header exchange'e gönderildiğinde, header içinde belirtilen anahtar-değer çiftlerine göre yönlendirilir. Routing key yerine, mesaj başlığındaki anahtar-değer çiftlerine göre yönlendirme yapılır.

6. Header Exchange Kullanım Senaryoları

Header exchange, özellikle şu durumlar için uygundur:

  • Çoklu Filtreleme Koşulları: Birden fazla başlık parametresine göre mesajları filtrelemek.
  • Esnek Yönlendirme İhtiyacı: Yönlendirme mantığının daha karmaşık olduğu durumlarda, başlık parametreleri ile daha esnek yönlendirme yapmak.
  • Özel Etiketler ve Koşullar: Mesajların özel etiketler veya koşullara göre yönlendirilmesi gerektiğinde.

Örnek:

Bir header exchange kurarak, mesajların belirli header anahtar-değer çiftlerine göre yönlendirilmesini sağlayalım.

Adım 1: Header Exchange Oluşturma

Öncelikle bir header exchange oluşturmalıyız. Bunu RabbitMQ komut satırından veya yönetim panelinden yapabiliriz. Örnek bir komutla header exchange oluşturabiliriz:

RabbitMQ Headers Exchange Binding: x-match Argümanı ve Başlık Bazlı Kuyruk Bağlama Ayarları

Bu komutla my_header_exchange adında bir header exchange oluşturuyoruz. headers türü, exchange'in türünü belirtir.

Adım 2: Kuyrukları Oluşturma

Şimdi, bu exchange'e bağlanacak kuyrukları oluşturalım. Örnek olarak, queue1 ve queue2 adlı iki kuyruk oluşturalım:

RabbitMQ Headers Exchange Mesaj Yayınlama: Özellikler (Properties) Kısmına Header Bilgisi Ekleme

Bu komutlarla queue1 ve queue2 kuyrukları oluşturuluyor.

Adım 3: Kuyrukları Header Exchange'e Bağlama

Bu adımda, her bir kuyruk için bir header parametresine göre bağlama işlemi yapacağız. Örneğin, queue1 için color=red ve queue2 için color=blue başlıklarıyla bağlama işlemi yapalım.

RabbitMQ Headers Exchange Sonucu: Başlık Eşleşmesine Göre Mesajın Doğru Kuyruğa İletilme Doğrulaması
  • queue1 yalnızca color=red başlığına sahip mesajları alacak.
  • queue2 ise yalnızca color=blue başlığına sahip mesajları alacak.

Adım 4: Mesaj Gönderme

Şimdi, header exchange'e bir mesaj gönderelim.

color=red başlığıyla bir mesaj gönderelim. Bu mesaj queue1 kuyruğuna gider çünkü queue1 sadece bu başlıkla eşleşen mesajları kabul ediyor.

RabbitMQ Headers Exchange Test Doğrulaması: Kuyruktaki Mesajın Header Parametreleri ve Payload Detayları

color=blue başlığıyla bir mesaj gönderelim. Bu mesaj queue2 kuyruğuna gider çünkü queue2 sadece bu başlıkla eşleşen mesajları kabul ediyor.

RabbitMQ Headers Exchange Test Sonucu: x-match Kurallarına Göre Mesaj Yönlendirme Doğrulaması

Adım 5: Kuyruklardaki Mesajları Görüntüleme

Son olarak, queue1 ve queue2 kuyruklarındaki mesajları görüntüleyebiliriz. Mesajlar yalnızca uygun header parametreleri ile bağlı kuyruklara yönlendirilmiştir.

7. Header Exchange'in Avantajları ve Dezavantajları

Avantajlar:

  • Esneklik: Mesajlar, header parametrelerine dayalı olarak çok daha esnek bir şekilde yönlendirilebilir. Bu, karmaşık yönlendirme gereksinimleri için çok faydalıdır.
  • Birden Fazla Parametreyle Yönlendirme: Routing key yerine, birden fazla başlık kullanarak çok sayıda filtreleme yapabilirsiniz. Bu, daha karmaşık ve özelleştirilmiş yönlendirmelere olanak tanır.
  • Yüksek Özelleştirme: Başlıklar, farklı anahtar-değer çiftlerine göre özelleştirilebilir, böylece mesajlar çok sayıda özel duruma göre yönlendirilebilir.

Dezavantajlar:

  • Karmaşıklık: Header exchange, özellikle çok sayıda anahtar-değer çifti kullanıldığında karmaşık hale gelebilir. Yönlendirme mantığı bazen zor anlaşılabilir ve yönetilebilir olabilir.
  • Performans: Yönlendirme kuralları daha karmaşık hale geldikçe, performans üzerinde olumsuz bir etkisi olabilir. Bu durum, özellikle büyük miktarda veri işleniyorsa, performansı olumsuz etkileyebilir.

RabbitMQ Mail Gönderme Sistemi

RabbitMQ Kullanım Senaryosu: Mikroservisler Arası Asenkron E-posta Gönderim Mimarisi ve Kuyruk Yönetimi

Bu yapıyı daha iyi anlamak ve açıklamak için, API, Mail Servisi, Consumer, SignalR, ve JS arasındaki etkileşimleri adım adım inceleyelim. Temelde bu mimaride şu bileşenler var:

  • API (Uygulama Sunucusu)
  • Mail Servisi (Mail gönderme işlemi)
  • Consumer (Mail Servisinden gelen mesajı işleyen bileşen)
  • SignalR (Client ile gerçek zamanlı iletişim için kullanılan teknoloji)
  • JavaScript (JS) (Frontend tarafında kullanıcıya bildirim gönderen kod)

Şimdi, her bir bileşenin rolünü ve etkileşimini sırasıyla açıklayalım:

1. API: Dışarıdan Gelen Maili Alma

API, dışarıdan gelen bir mail isteğini alır ve bu isteği işlemek üzere bir Mail Servisi'ne yönlendirir.

  • Mail alma: API, genellikle bir HTTP POST isteği alır (örneğin bir mail gönderme isteği). Bu istek, mailin içeriği, alıcı bilgisi gibi verileri içerir.
  • İşlem: Bu veriler alındığında, API maili bir Mail Servisi'ne iletmek üzere yönlendirir. Mail servisi, backend kısmında maili gerçek kullanıcıya iletmek veya başka işlemler yapmak için kullanılır.

Örnek olarak, API şöyle çalışabilir:

RabbitMQ Consumer Sonucu: Kuyruktaki Mesajın İşlenerek E-posta Bildirimine Dönüştürülmesi

Burada MailRequest adında bir nesne, dışarıdan gelen mail verisini temsil eder.

2. Mail Servisi: Mail Gönderme İşlemi

Mail Servisi, API'den gelen verileri alır ve mail gönderme işlemini başlatır. Mail servisi, genellikle RabbitMQ gibi bir mesaj kuyruğu sistemi kullanabilir.

  • Mail Gönderme: Mail servisi, bir producer olarak çalışabilir. Bu, API'den gelen mail verilerini alır ve bir kuyruğa (örneğin RabbitMQ) gönderir. Burada, mail gönderme işlemi zaman alabilir (örneğin bir SMTP sunucusuna bağlanma ve maili gönderme işlemi), bu yüzden kuyruğa mesaj gönderilir.
  • Asenkron İşlem: Mail servisi, bu asenkron işlem nedeniyle doğrudan API'ye geri dönüş yapmaz. Bunun yerine, consumer bu kuyruğu dinler ve işlemi başlatır.

Örnek olarak, Mail Servisi'nin mesaj kuyruğuna mail gönderme işlemi şöyle olabilir:

RabbitMQ Çoklu Mesaj İşleme: Kuyruğa Alınan Farklı E-posta Görevlerinin Asenkron Dağıtımı

3. Consumer: Maili İşleyen Bileşen

Consumer , mesaj kuyruğunda (örneğin RabbitMQ'da) bekleyen mesajları alır ve işleme başlar. Bu tüketici, maili almak ve göndermekle sorumlu olan bileşendir.

  • Mesaj Dinleme: Consumer, RabbitMQ kuyruğuna bağlanır ve burada bekleyen mail gönderme taleplerini alır. Mail servisi bu mesajları aldıktan sonra, maili gönderir ve işlem tamamlanır.
  • Mail Gönderme: Consumer, mailin başarıyla gönderilip gönderilmediğini kontrol eder. Eğer başarılı bir şekilde mail gönderildiyse, işlem başarılı olarak kabul edilir.

Örnek olarak, bir consumer aşağıdaki gibi çalışabilir:

RabbitMQ Asenkron İş Akışı: Kuyruktan Alınan Verilerin E-posta Servisi Aracılığıyla Son Kullanıcıya İletilmesi

4. SignalR: Gerçek Zamanlı Bildirim

SignalR, kullanıcıya mail işleminin başarılı olup olmadığını anlık olarak bildirmek için kullanılır. API veya Consumer tarafından mail gönderme işlemi tamamlandıktan sonra SignalR, frontend (client) tarafına bilgi gönderir.

  • Gerçek Zamanlı Bildirim: SignalR, mailin durumu hakkında anında bildirim gönderir. Mail başarıyla gönderildiyse kullanıcıya "Mail gönderildi" mesajı, başarısız olursa "Mail gönderilemedi" mesajı verilir.
  • SignalR Hub: Backend tarafında bir SignalR Hub kullanılır. Bu Hub, istemciye (client) gerçek zamanlı bildirimler gönderir. İstemci tarafında SignalR istemcisi de mailin durumu ile ilgili bildirimleri alır.

Örnek SignalR Hub implementasyonu:

RabbitMQ Ölçeklenebilir Mimari: Çoklu Consumer ile E-posta Kuyruğunun Eşzamanlı İşlenmesi

5. JavaScript (JS): Client Tarafı Bildirim

Frontend tarafında JavaScript (JS), SignalR üzerinden gelen bildirimleri alır ve kullanıcıyı bilgilendirir.

  • SignalR Bağlantısı: JavaScript, frontend kısmında SignalR ile bağlanarak mail durumu hakkında anında bilgi alır.
  • UI Güncelleme: Mail gönderme işlemi başarılı veya başarısız olduğunda, JS kullanıcı arayüzünü (UI) günceller. Örneğin, bir bildirim veya modal popup gösterilebilir.

JavaScript'te SignalR ile bağlantı ve bildirim alma işlemi şu şekilde olabilir:

RabbitMQ Mesajlaşma Sistemi Finali: Asenkron E-posta Gönderim Sürecinin Tamamlanması ve Kuyruk Özeti

Sürecin Akışı:

  • API dışarıdan gelen bir mail isteğini alır ve Mail Servisi'ne yönlendirir.
  • Mail Servisi gelen maili RabbitMQ kuyruğuna gönderir.
  • Consumer, kuyruğa gelen maili alır, işlemi başlatır ve maili gönderir.
  • Mail işlemi tamamlandığında, Consumer durumu SignalR Hub'ına bildirir.
  • SignalR, frontend tarafındaki JavaScript'e gerçek zamanlı olarak durumu iletir.
  • JavaScript, UI'yi günceller ve kullanıcıya mailin başarılı olup olmadığını bildirir.

Bu yapı sayesinde, mail gönderme işlemi hem asenkron bir şekilde işlenir hem de kullanıcıya işlem durumu gerçek zamanlı olarak iletilir. Bu tür bir yapı, özellikle uzun süren işlemlerin kullanıcıya anında geri bildirim sağlamasını gerektiği durumlarda oldukça kullanışlıdır.

Yorumlar