Makale Özeti

Microsoft Message Queuing (MsMq) farklı zamanlarda çalışabilecek uygulamalar arasında iletişimi sağlamak amacıyla geliştirilmiş bir teknolojidir. MsMq sayesinde çok geniş ölçekli ağlarda geçici olarak kullanılamayan uygulamaların, genel akışı kesmesi engellenir. MsMq, uygulamaların kendi aralarında iletişimi kurmak için mesajlar göndermelerini sağlar. MsMq mesajları her tür veriden oluşabilir.

Makale

Microsoft Message Queuing

Microsoft Message Queuing

Microsoft Message Queuing (MsMq) farklı zamanlarda çalışabilecek uygulamalar arasında iletişimi sağlamak amacıyla geliştirilmiş bir teknolojidir. MsMq sayesinde çok geniş ölçekli ağlarda geçici olarak kullanılamayan uygulamaların, genel akışı kesmesi engellenir. MsMq, uygulamaların kendi aralarında iletişimi kurmak için mesajlar göndermelerini sağlar. MsMq mesajları her tür veriden oluşabilir.

Çoğumuzun hergün cep telefonlarında kullandığı kısa mesaj servisi mesajlaşmayı anlamak için iyi bir örnek.Kısa mesaj gönderirken bir gönderici ve bir de alıcı bulunur. Siz mesajınızı yazar ve gönderirsiniz. Eğer alıcının telefonu erişebilir durumdaysa mesaj anında iletilir. Eğer alıcının telefonu erişebilir durumda değilse , mesajınız belli sunucularda oluşturulacak kuyruklarda saklanır ve alıcının telefonu erişebilir duruma geldiğinde mesaj iletilir. Bu yöntemin kullanılmasıyla siz mesajınızı gönderdikten sonra başka işlerinizle ilgilenebilirsiniz. İşte MsMq bu tarz bir yapı sunarak farklı zamanlarda çalışan uygulamaların birlikte işlerliğini sağlar. MsMq farklı zamanlarda çalışabilecek uygulamalar kullanıldığı gibi eşzamanlı çalışan uygulamalarda da kullanılabilir. Örneğin bir firma hem internet üzerinden hem de gezici satış elemanlarından gelen siparişlerle satış yapabilir.Bu durumda internet üzerinden verilen siparişlerin anında sisteme girilmesi için farklı uygulama, mesai bitiminde gezici elemanlar tarafından getirilen siparişlerin sisteme girilmesi için farklı uygulama gerekir.Fakat MsMqnun her iki senaryoya (senkron/asenkron) verdiği destek sayesinde, farklı senaryolar için farklı uygulamalar geliştirme gerekliliği ortadan kalkar.

Diğer bir yaklaşımla MsMq akış hattında herhangi bir sorun oluştuğunda bilginin korunmasını ve sorun giderildiğinde bilgilerin gerekli sırada ve gerekli yerlere iletilmesini sağlar.

 

Uygulamalarımızda mesajlaşma kullamak istersek MsMq‘yu yüklememiz gerekir.
Bunun için ;

  • Control Panel
  • Add or Remove Programs
  • Add / Remove Windows Components
  • Message Queuing

seçeneklerini takip edin ve yüklemeyi tamamlayın.

Bu işlemleri gerçekleştirdikten sonra artık mesajlaşmayı kullanacak uygulamarı geliştirmek için altyapıyı sağlamış olduk. Bu aşamada

  • Administrative Tools
  • Computer Management
  • Message Queuing

başlığını görebiliyor olmalısınız.

Mesajlaşma işlemlerinin yönetimi buradan yapılabilir.

Hem MsMqnun nasıl işlediğini hem de Vb.Net altında nasıl programlandığını göstermek adına küçük bir uygulamacık geliştirelim.

Hayali firmamız için geliştireceğimiz uygulama , kullanıcıların göndereceği kısa mesajları yöneticiye aktaracak. Kullanıcılardan heran mesaj kabul edilmesine rağmen, yönetici bunları ancak uygun olduğu zamanlarda okuyacak. Yönetici müsait olmadığında ya da arada uygun bağlantı kurulamadığında mesajlar MsMq tarafından uygun zamanda iletilmek üzere saklanacak. (Tabiki biz, kısa mesaj değil MsMq mesajları gönderecğiz :) )

Uygulamacığımız iki bölümden oluşacak. Önce kullanıcı bölümünü oluşturalım. Visual Studio altından yeni bir windows projesi başlatın. Projemizde mesajlaşma kullanabilmek için System.Messaging isimuzayına referans ekleyin. Formumuza kısa mesajları yazmak için bir texbox ve yazılan mesajı göndermek için de bir button sürükleyin. Kod bölümüne geçin ve ilk satıra "Imports System.Messaging" yazdıktan sonra aşağıdaki kodları ekleyin.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  
       Dim Sms As New MessageQueue
        Sms, MessageQueue tipinden türetiliyor

       
Try
            If MessageQueue.Exists(".\Private$\Sms") = False Then
                MessageQueue.Create(".\Private$\Sms")
                Eğer MsMq üzerinde "Sms" 
                isimli bir kuyruk yoksa oluşturuluyor
            End If

            Sms.Path = ".\Private$\sms"
            Sms nesnemizin yol bilgisine oluşturduğumuz kuyruğun yolu atanıyor
            Sms.Send(TextBox1.Text)
            Textboxdaki katar kuyruğa mesaj olarak gönderiliyor  

        Catch ex As MessageQueueException
            MessageBox.Show(ex.Message, "Hata")
            Hata yakalama mekanizması
        End Try

    End Sub


Şimdi sıra yöneticinin kullanacağı uygulamacığı geliştirmede. Bunun için yine yeni bir windows projesi başlatın ve yine aynı şekilde System.Messaging isimuzayına referans ekleyin. Formumuza kısa mesajları listelemek için bir listbox ve alımı durdurmak/başlatmak için bir de button sürükleyin. Kod bölümünün ilk satırına "Imports System.Messaging" yazdıktan sonra aşağıdaki kodları ekleyin.

Public WithEvents Sms As New MessageQueue(".\Private$\sms")
    Mesajımızın yolunu belirterek türetiyoruz.
    Dim Musait As Boolean = False
    Müsait olup olmadığını tutan değişken

      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Sms.Send("-----")
        Ayraç olarak kullanılıyor

        Musait = Not Musait
        Butona basıldığında değer ters çevriliyor

        If Musait = True Then
            Button1.Text = "Sms alımını durdur"
            Sms.BeginReceive()
            Eğer müsaitse sms alımı başlatılıyor
        Else
            Button1.Text = "Sms alımını başlat"
        End If

    End Sub

     Private Sub SmsAktarimTamamlaninca(ByVal sender As System.Object, ByVal e As System.Messaging.ReceiveCompletedEventArgs) Handles Sms.ReceiveCompleted

        Mesaj alımı tamamlanınca bu kısım icra ediliyor

        If Musait = True Then
            Try
                Dim m As Message
                m = Sms.EndReceive(e.AsyncResult)

                Dim o As String
                o = CType(m.Body, String)
                ListBox1.Items.Add(o)

               
Mesajımızın içeriğini string tipine dönüştürüp
                listboxa ekliyoruz.  

                Sms.BeginReceive()
                Sonraki mesajın alınmasını sağlıyoruz  

            Catch exp As MessageQueueException
                MessageBox.Show(exp.Message)
            Catch exp As Exception
                MessageBox.Show(exp.Message)
            End Try
        End If
    End Sub

Tamamladıktan sonra her iki uygulamayı da çalıştırın. Kullanıcı programından kısa mesaj gönderin.Gönderdiğiniz kısa mesajlar ancak yönetici müsait olduğunda yönetici uygulamasında listelenecek. Yönetici uygulamasından kısa mesaj alımını durdurun. Kullanıcı uygulamasından mesaj göndermeye devam edin. Sonra yönetici uygulamasından tekrar kısa mesaj alımına izin verin. Gönderdiğiniz tüm mesajların kayıpsız listelendiklerini kontrol edin. Alınmayan veya alınamayan tüm mesajların Computer Management - Message Queuing - Private Queues - Sms - Queue messages başlığı altında listelendiğini görebilirsiniz.

Böylelikle MsMq hakkında genel bilgilere sahip olmuş olduk. Bir sonraki yazıda görüşmek üzere.

Yazı hakkında yorumlarınızı bekliyorum.

 

Kâsım GÜLCAN
SQLNedir?com