Skip to content

.NET İçin Kuyruk Çözümleri : MSMQ

.NET İçin Kuyruk Çözümleri : MSMQ

MSMQ Nedir?

MSMQ zaman bağımsız olarak birden fazla uygulama arasında offline veri alışverişini sağlayan Windows tabanlı kuyruk sistemidir. MSMQ ile birlikte uygulama veya ağ üzerinde bir sorun oluşsa dahi (çökme, hata fırlatma vb.) akış, gerçekleşen sorun giderildikten sonra veya çöken/çalışmayı durduran uygulama tekrar çalışmaya başladıktan sonra devam eder.

MSMQ ile iletilen mesajlar sistem üzerinde fiziksel bir alanda saklanmaktadır. Bu noktada yukarıda bahsetmiş olduğumuz senaryolar dahil, mesajları alması beklenen uygulama kapalı olsa dahi bu mesajlar saklanmaktadır.

Resim 1: Oluşturduğunuz Queue’ları Computer Management Ekranından Görmeniz Mümkün (compmgmt.msc)

Kuyruk Tipleri

MSMQ için iki adet kuyruk tipi mevcut;

Public Queues:

Bu tipte oluşturulmuş olan kuyruklara, yalnızca oluşturulduğu sunucu/bilgisayardaki uygulamalardan değil, aynı ağa bağlı tüm sunucu/bilgisayarlardan erişim sağlanabilmektedir. Bu sayede aynı ağda bulunan iki farklı sunucu ve bu sunucularda kurulu olan farklı uygulamalar arasında da MSMQ aracılığı ile mesaj iletimi sağlanabiliyor.

Private Queues:

Bu tipte oluşturulmuş olan kuyruklara ise yalnızca oluşturulduğu bilgisayar/uygulama üzerinden erişim sağlanabilir ve yalnızca aynı bilgisayar/sunucu üzerinde kurulu olan uygulamalar bu kuyruktan beslenebilir ve bu kuyruğu besleyebilir.

Programlanabilirlik

MSMQ alt yapısı C#, VB.NET ve .NET tabanlı diğer diller tarafından kullanılabilmektedir. System.Messaging namespace’i altından erişilebilir.

Kurulum

Eğer MSMQ sistemini bilgisayarınıza kurmak isterseniz, aşağıdaki adımları takip edebilirsiniz.

  1. Denetim Masası üzerinden “Programlar” seçimini yapın, ardından açılan ekranda “Programlar ve Özellikler” altında bulunan “Windows Özelliklerini Aç veya Kapat” seçimini yapın. Veya Windows + R tuş kombinasyonu ile “optionalfeatures” komutunu çalıştırabilirsiniz.
  2. Açılan pencerede “Microsoft Message Queue (MSMQ) Server” seçeneğini işaretleyin

Resim 2: “Windows Özelliklerini Aç veya Kapat” seçimi sonrası açılan pencereden “Microsof Message Queue (MSMQ) Server” özelliği işaretlenmeli.

Aynı kurulumu Windows Sunucu üzerinde yapmak için ise aşağıdaki adımları izlemelisiniz;

  1. Server Manager açıldıktan sonra Sağ üst tarafta bulunan Manage altından, “Add Roles and Features” seçilir.
  2. Açılan pencereden Features adımına gelindikten sonra listeden “Message Queuing” özelliği işaretlenir. Bu seçimin ardından “Install” butonu tıklanır ve özelliğin aktif edilme süreci bağlar. Bu işlemin ardından sunucunuzu yeniden başlatmanız gerekmez.

Resim 3: Features adımı altındaki listeden “Message Queuing” seçimi yapılır ve Install butonu tıklanarak kurulum süreci başlatılır.

C# Uygulamalarında MSMQ’yu Kullanmak

MSMQ’nun ne olduğundan ve nasıl kurulduğundan bahsettiğimize göre, örnek bir senaryo üzerinden bir C# uygulamasında MSMQ’nun sağladığı kuyruk alt yapısından nasıl faydalanabiliriz inceleyelim.

Senaryomuz; PeakUp’ta yeni işe başlayan personelin bilgisi sisteme girildiğinde, ilgili çalışana mail atmak olsun. Bu senaryoda ihtiyacımız olan iki uygulama var;

  1. Personel bilgilerinin girileceği uygulama
  2. Farklı uygulamalardan gelen mail gönderme taleplerini karşılayacak ve mailleri gönderecek uygulama.

İlk uygulamamızın ismi Peakup.Employee.Manager olsun. Projemizin yapısı aşağıdaki gibi;

PeakUp.Empoyee.Manager

  • Extensions
    • MessageQueueExtensions.cs (MessageQueue sınıfı için yazacağımız extension metotlar)
  • Models
    • EmployeeModel.cs (Personel sınıfı)
    • Mail.cs (Mail Sınıfı)
  • Program.cs

Önemli

MessageQueue sınıfını kullanabilmemiz için her iki projemize de System.Messaging referansını eklememiz gerekiyor.

Şimdi kodlara göz atalım:

Oluşturmak istediğimiz isimde bir Queue zaten varsa onu getirmek, yoksa tekrar oluşturmak gerekiyor. Bu işlemi daha hızlı bir şekilde gerçekleştirmek için bu Extension metodu kullanabilirsiniz.

https://gist.github.com/kivancbakdi/9ca90e66f422151ff1db65b7c13f146a

Employee ve Mail sınıflarımız;

https://gist.github.com/kivancbakdi/87f66c7e26a3e91fdea43d572d94dccd

https://gist.github.com/kivancbakdi/d20de4c25791aec483b2755987e08ac8

Yeni personel oluşturma ve bu personeli mail için kuyruğa atma işlemlerini yaptığımız program dosyamız;

https://gist.github.com/kivancbakdi/3c2af5f2b1f008c6e048474c0027f915

İkinci uygulamamızın ismi ise PeakUp.Email.Manager. Projemizin yapısı aşağıdaki gibi;

PeakUp.Email.Manager

  • Extensions
    • MessageQueueExtensions.cs (MessageQueue sınıfı için yazacağımız extension metotlar)
  • Models
    • Mail.cs (Mail Sınıfı)
  • Program.cs

Bu projemizin kodları da aşağıdaki gibi;

Oluşturmak istediğimiz isimde bir Queue zaten varsa getirmek, yoksa tekrar oluşturmamız gerekiyor. Bu işlemi daha hızlı bir şekilde gerçekleştirmek için bu Extension metodu kullanabilirsiniz.

https://gist.github.com/kivancbakdi/9ca90e66f422151ff1db65b7c13f146a

Mail sınıfımız;

https://gist.github.com/kivancbakdi/d20de4c25791aec483b2755987e08ac8

Mail kuyruğunu dinleyen ve mail sınıfını konsola yazdıran program dosyamız;

https://gist.github.com/kivancbakdi/e74526652da6f740544de516bdd1e51b

Bir C# projesinde MSMQ kullanan bu yazımızın sonuna gelmiş olduk. Bu konuyla ilgili daha fazla detaya ihtiyaç duyuyor veya örnekleri beraber incelemek istiyorsanız Live Coding Sessions‘larımızı takip etmeyi ihmal etmeyin!

Teşekkürler!