Ohjelmointi

Kuinka työskennellä MSMQ: n kanssa C #: ssä

MSMQ (Microsoft Message Queuing) on ​​viestijono, joka on oletusarvoisesti käytettävissä osana Windowsia. Luotettava tapa lähettää ja vastaanottaa viestejä tietokonejärjestelmissä. MSMQ tarjoaa skaalautuvan, langankiertoisen, yksinkertaisen ja kätevän jonon samalla, kun se tarjoaa sinulle mahdollisuuden säilyttää viestit Windowsin tietokannassa. MSDN toteaa: "Message Queuing (MSMQ) -tekniikan avulla eri aikoina toimivat sovellukset voivat kommunikoida heterogeenisten verkkojen ja järjestelmien välillä, jotka voivat olla väliaikaisesti offline-tilassa. Sovellukset lähettävät viestejä jonoihin ja lukevat viestejä jonoista."

Yleensä sinulla on kaksi erillistä sovellusta työskennellessäsi MSMQ: n kanssa - lähettäjä ja vastaanottaja. Kun lähettäjä eli lähettävä sovellus lähettää viestit, vastaanottavan sovelluksen ei tarvitse olla suoritustilassa - viestit tallennetaan tosiasiallisesti isäntäkäyttöjärjestelmän ylläpitämään jonoon, ja ne poistetaan jonosta aina kun ne joita vastaanottava sovellus tarvitsee.

Jonon luominen

Voit ottaa MSMQ: n käyttöön järjestelmässä ohjauspaneelin "Ota Windowsin ominaisuudet käyttöön tai pois käytöstä" -vaihtoehdon avulla. Kun MSMQ on asennettu järjestelmään, jonon luominen on helppoa. Siirry vain Oma tietokone -kohtaan, napsauta hiiren kakkospainikkeella ja valitse Hallitse. "Tietokoneen hallinta" -ikkunassa voit luoda uuden jonon "Message Queuing" -solmusta. Voit myös luoda jonon ohjelmallisesti.

MSMQ: n ohjelmointi C #

Jotta voisit työskennellä MSMQ: n kanssa, sinun on sisällytettävä System.Messaging-nimitila. Jos haluat luoda jonon ohjelmallisesti, sinun on hyödynnettävä MessageQueue-luokan Luo-menetelmää. Seuraava koodinpätkä kuvaa tätä.

MessageQueue.Create (@ ". \ Private $ \");

Voit luoda jonon ja lähettää sille viestin seuraavalla koodinpätkällä.

MessageQueue.Create (@ ". \ Private $ \");

messageQueue = uusi MessageQueue (@ ". \ Private $ \");

messageQueue.Label = "Tämä on testijono.";

messageQueue.Send ("Tämä on testiviesti.", "");

Oletetaan, että haluat tarkistaa, onko jono olemassa, ja jos se on, lähetä sille viesti. Jos jonoa ei ole, kannattaa ehkä luoda uusi ja lähettää sitten viesti. Juuri seuraava koodiluettelo tekee sinulle.

staattinen void Main (merkkijono [] args)

        {

MessageQueue messageQueue = tyhjä;

string description = "Tämä on testijono.";

string message = "Tämä on testiviesti.";

merkkijonopolku = @ ". \ Private $ \";

yrittää

            {

jos (MessageQueue.Exists (polku))

                {

messageQueue = uusi MessageQueue (polku);

messageQueue.Label = kuvaus;

                }

muu

                {

MessageQueue.Create (polku);

messageQueue = uusi MessageQueue (polku);

messageQueue.Label = kuvaus;

                }

messageQueue.Send (viesti);

            }

saada kiinni

            {

heittää;

            }

lopulta

{

messageQueue.Dispose ();

}

      }

Seuraava koodiluettelo kuvaa, kuinka voit käsitellä viestijonoon tallennettuja viestejä C #: lla.

yksityinen staattinen luettelo ReadQueue (merkkijonopolku)

        {

Lista lstMessages = uusi Lista ();

käyttäen (MessageQueue messageQueue = uusi MessageQueue (polku))

            {

System.Messaging.Message [] messages = messageQueue.GetAllMessages ();

foreach (System.Messaging.Message message in messages)

                {

message.Formatter = uusi XmlMessageFormatter (

uusi merkkijono [] {"System.String, mscorlib"});

merkkijono msg = message.Body.ToString ();

lstMessages.Add (msg);

                }

            }

return lstMessages;

        }

Seuraavaksi voit hakea ReadQueue-menetelmän hakeaksesi viestijonoon tallennetut viestit alla olevan koodinpätkän mukaisesti.

merkkijonopolku = @ ". \ Private $ \";

Lista lstMessages = Lukujono (polku);

Voit myös tallentaa objekteja viestijonoon. Oletetaan esimerkiksi, että sinun on tallennettava lokiviesti jonoon. Lokiviesti tallennetaan LogMessage-luokan ilmentymään, joka sisältää tarvittavat ominaisuudet, jotka liittyvät lokiviestin yksityiskohtiin. Näin LogMessage-luokka näyttäisi - olen tehnyt sen yksinkertaiseksi vain kahdella ominaisuudella.

julkisen luokan LogMessage

    {

julkinen merkkijono MessageText {get; aseta; }

public DateTime MessageTime {get; aseta; }

    }

Sinun tulisi muokata LogMessage-luokkaa sisällyttämään siihen muut tarvittavat ominaisuudet, eli viestin vakavuus jne. Seuraava menetelmä kuvaa, kuinka voit tallentaa LogMessage-luokan ilmentymän viestijonoon.

private static void SendMessage (merkkijono jononimi, LogMessage-viesti)

        {

MessageQueue messageQueue = tyhjä;

jos (! MessageQueue.Exists (queueName))

messageQueue = MessageQueue.Create (jononimi);

muu

messageQueue = uusi MessageQueue (queueName);

yrittää

            {

messageQueue.Formatter = new XmlMessageFormatter (new Type [] {typeof (LogMessage)});

messageQueue.Send (msg);

            }

saada kiinni

            {

// Kirjoita koodi tähän tarvittavien virheiden käsittelyä varten.

            }

lopulta

            {

messageQueue.Close ();

            }          

        }

Seuraava koodinpätkä kuvaa, kuinka voit luoda LogMessage-luokan ilmentymän, täyttää sen tiedoilla ja kutsua sitten SendMessage-menetelmän tallentaaksesi viestijonoon luodun ilmentymän.

LogMessage msg = uusi LogMessage ()

            {

MessageText = "Tämä on testiviesti.",

MessageTime = DateTime.Now

            };

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

Seuraava koodiluettelo kuvaa, kuinka voit lukea viestijonoon tallennetun LogMessage-ilmentymän.

yksityinen staattinen LogMessage ReceiveMessage (merkkijono jononimi)

        {

jos (! MessageQueue.Exists (queueName))

return null;

MessageQueue messageQueue = uusi MessageQueue (queueName);

LogMessage logMessage = tyhjä;

yrittää

            {

messageQueue.Formatter = new XmlMessageFormatter (new Type [] {typeof (LogMessage)});

logMessage = (LogMessage) messageQueue.Receive (). Body;

            }

saada kiinni { }

lopulta

            {

messageQueue.Close ();

            }

paluulokiMessage;

        }