Προγραμματισμός

Πώς να εργαστείτε με το MSMQ στο C #

Το MSMQ (Microsoft Message Queuing) είναι μια ουρά μηνυμάτων που είναι διαθέσιμη από προεπιλογή ως μέρος των Windows. Ένας αξιόπιστος τρόπος αποστολής και λήψης μηνυμάτων σε συστήματα υπολογιστών, το MSMQ παρέχει μια ουρά που είναι επεκτάσιμη, ασφαλής για νήματα, απλή και βολική στη χρήση, ενώ ταυτόχρονα σας δίνει την ευκαιρία να διατηρήσετε τα μηνύματα μέσα στη βάση δεδομένων των Windows. Το MSDN δηλώνει: "Η τεχνολογία ουράς μηνυμάτων (MSMQ) επιτρέπει σε εφαρμογές που εκτελούνται σε διαφορετικές χρονικές στιγμές να επικοινωνούν μεταξύ ετερογενών δικτύων και συστημάτων που ενδέχεται να είναι προσωρινά εκτός σύνδεσης. Οι εφαρμογές στέλνουν μηνύματα σε ουρές και διαβάζουν μηνύματα από ουρές."

Συνήθως, έχετε δύο ξεχωριστές εφαρμογές όταν εργάζεστε με το MSMQ - τον αποστολέα και τον παραλήπτη. Όταν τα μηνύματα αποστέλλονται από τον αποστολέα, δηλαδή την εφαρμογή αποστολής, η εφαρμογή λήψης δεν χρειάζεται να βρίσκεται σε κατάσταση εκτέλεσης - τα μηνύματα αποθηκεύονται στην ουρά που διατηρείται από το λειτουργικό σύστημα κεντρικού υπολογιστή και αυτά αποστέλλονται στην ουρά όπως και όταν απαιτούνται από την αίτηση παραλαβής.

Δημιουργία ουράς

Μπορείτε να ενεργοποιήσετε το MSMQ στο σύστημά σας μέσω της επιλογής "Ενεργοποίηση ή απενεργοποίηση των δυνατοτήτων των Windows" από τον πίνακα ελέγχου. Μόλις εγκατασταθεί το MSMQ στο σύστημά σας, η δημιουργία μιας ουράς είναι απλή. Απλώς μεταβείτε στο "Ο Υπολογιστής μου", κάντε δεξί κλικ και επιλέξτε Διαχείριση. Στο παράθυρο "Διαχείριση υπολογιστή" μπορείτε να δημιουργήσετε μια νέα ουρά από τον κόμβο "Ουρά μηνυμάτων". Μπορείτε επίσης να δημιουργήσετε μια ουρά μέσω προγραμματισμού.

Προγραμματισμός MSMQ σε C #

Για να εργαστείτε με το MSMQ, θα πρέπει να συμπεριλάβετε το χώρο ονομάτων System.Messaging. Για να δημιουργήσετε μια ουρά μέσω προγραμματισμού, πρέπει να αξιοποιήσετε τη μέθοδο Δημιουργία της κλάσης MessageQueue. Το ακόλουθο απόσπασμα κώδικα το δείχνει αυτό.

MessageQueue.Create (@ ". \ Ιδιωτικό $ \");

Για να δημιουργήσετε μια ουρά και να στείλετε ένα μήνυμα σε αυτήν, μπορείτε να χρησιμοποιήσετε το ακόλουθο απόσπασμα κώδικα.

MessageQueue.Create (@ ". \ Ιδιωτικό $ \");

messageQueue = νέο MessageQueue (@ ". \ Private $ \");

messageQueue.Label = "Αυτή είναι μια δοκιμαστική ουρά.";

messageQueue.Send ("Αυτό είναι ένα δοκιμαστικό μήνυμα.", "");

Τώρα, ας υποθέσουμε ότι θα θέλατε να ελέγξετε αν υπάρχει η ουρά και αν ισχύει, στείλτε ένα μήνυμα σε αυτήν. Εάν η ουρά δεν υπάρχει, ίσως θελήσετε να δημιουργήσετε μια νέα και στη συνέχεια να της στείλετε ένα μήνυμα. Αυτό ακριβώς κάνει η ακόλουθη λίστα κωδικών για εσάς.

static void Main (συμβολοσειρά [] args)

        {

MessageQueue messageQueue = null;

string description = "Αυτή είναι μια δοκιμαστική ουρά.";

string message = "Αυτό είναι ένα δοκιμαστικό μήνυμα.";

string path = @ ". \ Ιδιωτικό $ \";

δοκιμάστε

            {

εάν (MessageQueue.Exists (διαδρομή))

                {

messageQueue = νέο MessageQueue (διαδρομή);

messageQueue.Label = περιγραφή;

                }

αλλού

                {

MessageQueue.Create (διαδρομή);

messageQueue = νέο MessageQueue (διαδρομή);

messageQueue.Label = περιγραφή;

                }

messageQueue.Send (μήνυμα);

            }

σύλληψη

            {

βολή;

            }

τελικά

{

messageQueue.Dispose ();

}

      }

Η ακόλουθη λίστα κωδικών δείχνει πώς μπορείτε να επεξεργαστείτε τα μηνύματα που είναι αποθηκευμένα σε μια ουρά μηνυμάτων χρησιμοποιώντας το C #.

ιδιωτικό στατικό List ReadQueue (διαδρομή συμβολοσειράς)

        {

Λίστα lstMessages = νέα λίστα ();

χρησιμοποιώντας (MessageQueue messageQueue = νέο MessageQueue (διαδρομή))

            {

System.Messaging.Message [] μηνύματα = messageQueue.GetAllMessages ();

foreach (System.Messaging.Message μήνυμα σε μηνύματα)

                {

message.Formatter = νέο XmlMessageFormatter (

νέα συμβολοσειρά [] {"System.String, mscorlib"});

string msg = message.Body.ToString ();

lstMessages.Add (msg);

                }

            }

επιστροφή lstMessages;

        }

Στη συνέχεια, μπορείτε να καλέσετε τη μέθοδο ReadQueue για να ανακτήσετε τα μηνύματα που είναι αποθηκευμένα στην ουρά μηνυμάτων, όπως φαίνεται στο παρακάτω απόσπασμα κώδικα.

string path = @ ". \ Ιδιωτικό $ \";

Λίστα lstMessages = ReadQueue (διαδρομή);

Μπορείτε επίσης να αποθηκεύσετε αντικείμενα στην ουρά μηνυμάτων. Για παράδειγμα, ας υποθέσουμε ότι πρέπει να αποθηκεύσετε ένα μήνυμα καταγραφής στην ουρά. Το μήνυμα καταγραφής αποθηκεύεται σε μια παρουσία της κλάσης LogMessage που περιέχει τις απαραίτητες ιδιότητες που σχετίζονται με τις λεπτομέρειες του μηνύματος καταγραφής. Δείτε πώς θα μοιάζει η κλάση LogMessage - το έκανα απλό με δύο μόνο ιδιότητες.

LogMessage δημόσιας τάξης

    {

δημόσια συμβολοσειρά MessageText {get; σειρά; }

δημόσιο DateTime MessageTime {get; σειρά; }

    }

Θα πρέπει να τροποποιήσετε την κλάση LogMessage για να ενσωματώσετε άλλες απαραίτητες ιδιότητες, δηλαδή σοβαρότητα μηνύματος κ.λπ. Η ακόλουθη μέθοδος δείχνει πώς μπορείτε να αποθηκεύσετε μια παρουσία της κλάσης LogMessage στην ουρά μηνυμάτων.

ιδιωτικό στατικό κενό SendMessage (string queueName, LogMessage msg)

        {

MessageQueue messageQueue = null;

εάν (! MessageQueue.Exists (queueName))

messageQueue = MessageQueue.Create (queueName);

αλλού

messageQueue = νέο MessageQueue (queueName);

δοκιμάστε

            {

messageQueue.Formatter = νέο XmlMessageFormatter (νέος τύπος [] {typeof (LogMessage)});

messageQueue.Send (msg);

            }

σύλληψη

            {

// Γράψτε κώδικα εδώ για να κάνετε τον απαραίτητο χειρισμό σφαλμάτων.

            }

τελικά

            {

messageQueue.Close ();

            }          

        }

Το ακόλουθο απόσπασμα κώδικα δείχνει πώς μπορείτε να δημιουργήσετε μια παρουσία της κλάσης LogMessage, να την συμπληρώσετε με δεδομένα και, στη συνέχεια, να καλέσετε τη μέθοδο SendMessage για να αποθηκεύσετε την παρουσία που δημιουργήθηκε στην ουρά μηνυμάτων.

LogMessage msg = νέο LogMessage ()

            {

MessageText = "Αυτό είναι ένα δοκιμαστικό μήνυμα.",

MessageTime = DateTime. Τώρα

            };

SendMessage (@ ". \ Private $ \ Log", msg);

Η ακόλουθη λίστα κώδικα δείχνει πώς μπορείτε να διαβάσετε την παρουσία LogMessage που είναι αποθηκευμένη στην ουρά μηνυμάτων.

ιδιωτικό στατικό LogMessage ReceiveMessage (string queueName)

        {

εάν (! MessageQueue.Exists (queueName))

επιστροφή μηδέν;

MessageQueue messageQueue = νέο MessageQueue (queueName);

LogMessage logMessage = null;

δοκιμάστε

            {

messageQueue.Formatter = νέο XmlMessageFormatter (νέος τύπος [] {typeof (LogMessage)});

logMessage = (LogMessage) messageQueue.Receive (). Σώμα;

            }

σύλληψη { }

τελικά

            {

messageQueue.Close ();

            }

επιστροφή logMessage;

        }