Beispiel zu Messaging mit MSMQ

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Da mir gerade mal ein wenig langweilig ist, dachte ich mir ich mach mal was sinnvolles und
schau mir mal wieder ein wenig über den Tellerrand diesmal in Richtung Messaging unter .Net mit MSMQ
(Microsoft Message Queue)

Vorbereitung:
Zuerst muß man sich lokal die MSMQ Erweiterungen für Windows XP installieren:
-> Systemsteuerung -> Software -> Windows Komponenten hinzufügen -> Message Queueing... alles Selektieren.
(Windows XP CD bereit halten)

Ist die MSMQ Erweiterung installiert, kann man in der Computerverwaltung eine Message Queue anlegen, was wir auch
gleich tun.
Rechte Maustaste auf Arbeitsplatz -> Verwalten -> Dienste und Anwendungen -> Message Queuing
(Da wir unsere Message Queue nicht in einem Active Directory veröffentlichen, und wir im sogenannten
Workstation Mode arbeiten wollen legen wir nun eine Private Warteschlange mit dem Namen privateTestQueue an.
Dazu klicken wir mit der Rechten Maustaste auf "Private Warteschlangen" -> Neu -> Private Warteschlange.

Anschließend erscheint unsere Warteschlange unter dem entsprechenden Knoten.

Nun bauen wir uns ein kleines Point-to-Point Messaging Beispiel in C#:
Dazu müssen wir noch einen Verweis hinzufügen: "System.Messaging".

C#:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Messaging;

namespace De.Tutorials.Training
{
    public class MessagingExample
    {
        string messageQueuePath;

        public MessagingExample(string messageQueuePath)
        {
            this.messageQueuePath = messageQueuePath;
        }

        public static void Main(string[] args)
        {
            MessagingExample simpleMessageQueue = new MessagingExample(@"FormatName:direct=os:.\Private$\privateTestQueue");
            simpleMessageQueue.StartMessageProduction();
            simpleMessageQueue.StartMessageReceiving();
        }

        private void StartMessageReceiving()
        {
            Thread thread = new Thread(new ThreadStart(ReceiveMessages));
            thread.Start();

        }

        private void ReceiveMessages()
        {
            MessageQueue messageQueue = new MessageQueue(messageQueuePath);
            messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
            while (true)
            {
                Message message = messageQueue.Receive();
                Console.WriteLine("Received: " + message.Body);

            }
        }

        private void StartMessageProduction()
        {
            Thread thread = new Thread(new ThreadStart(ProduceMessages));
            thread.Start();
        }

        private void ProduceMessages()
        {
            MessageQueue messageQueue = new MessageQueue(messageQueuePath);
            while (true)
            {
                string message = "Message: Fooooo" + System.DateTime.Now.Ticks;
                Console.WriteLine("Sending Message: " + message);
                messageQueue.Send(message);
                Thread.Sleep(5000);
            }
        }
    }
}

"FormatName:direct=os:.\Private$\privateTestQueue" gibt den Pfad zu unserer MessageQueue an. Dabei steht der . für
localhost. Da wir eine private Message Queue verwenden findet man die (analog zu den Administrativen Freigaben wie C$ unter Windows) unter Private$.

Na ja, jetzt hat man zumindest mal was zum rumspielen ;-)

Gruß Tom
 
Hallo,

was funktioniert denn nicht? Welche Windows bzw. .Net Version verwendest du denn?
Unter Windows XP funktionierts bei mir mit .Net 2.0

Gruß Tom
 

Neue Beiträge

Zurück