Programovanie

Ako pracovať s MSMQ v C #

MSMQ (Microsoft Message Queuing) je front správ, ktorý je predvolene k dispozícii ako súčasť systému Windows. Spoľahlivý spôsob odosielania a prijímania správ naprieč počítačovými systémami. MSMQ poskytuje frontu, ktorá je škálovateľná, bezpečná pre vlákna, jednoduchá a pohodlná na použitie a zároveň vám poskytuje príležitosť pretrvávať správy v databáze Windows. MSDN uvádza: "Technológia Message Queuing (MSMQ) umožňuje aplikáciám bežiacim v rôznych časoch komunikovať cez heterogénne siete a systémy, ktoré môžu byť dočasne offline. Aplikácie odosielajú správy do frontov a čítajú správy z frontov."

Pri práci s MSMQ máte zvyčajne dve odlišné aplikácie - odosielateľa a príjemcu. Keď sú správy odosielané odosielateľom, tj. Odosielajúcou aplikáciou, nemusí byť prijímajúca aplikácia v stave vykonávania - správy sa skutočne ukladajú do poradia udržiavaného hostiteľským operačným systémom a tieto sa zaraďujú do poradia, keď a prijímajúca žiadosť potrebuje.

Vytváranie frontu

MSMQ vo svojom systéme môžete zapnúť pomocou možnosti „Zapnúť alebo vypnúť funkcie systému Windows“ na ovládacom paneli. Po nainštalovaní MSMQ do vášho systému je vytvorenie fronty jednoduché. Stačí ísť do "Tento počítač", kliknúť pravým tlačidlom myši a zvoliť Spravovať. V okne „Správa počítača“ môžete vytvoriť nový front z uzla „Správa front“. Zoznam môžete vytvoriť aj programovo.

Programovanie MSMQ v C #

Aby ste mohli pracovať s MSMQ, budete musieť zahrnúť menný priestor System.Messaging. Ak chcete programovo vytvoriť front, musíte využiť metódu Create triedy MessageQueue. Ilustruje to nasledujúci úryvok kódu.

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

Ak chcete vytvoriť rad a odoslať doň správu, môžete použiť nasledujúci útržok kódu.

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

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

messageQueue.Label = "Toto je testovací rad.";

messageQueue.Send ("Toto je testovacia správa.", "");

Teraz si predstavte, že by ste chceli skontrolovať, či front existuje, a ak áno, pošlite mu správu. Ak poradie neexistuje, môžete vytvoriť nový a odoslať mu správu. Presne to pre vás robí nasledujúci zoznam kódov.

static void Main (reťazec [] args)

        {

MessageQueue messageQueue = null;

string description = "Toto je testovacia fronta.";

string message = "Toto je testovacia správa.";

reťazec cesta = @ ". \ Súkromné ​​$ \";

skús

            {

if (MessageQueue.Exists (cesta))

                {

messageQueue = nová MessageQueue (cesta);

messageQueue.Label = popis;

                }

inak

                {

MessageQueue.Create (cesta);

messageQueue = nová MessageQueue (cesta);

messageQueue.Label = popis;

                }

messageQueue.Send (správa);

            }

chytiť

            {

hod;

            }

konečne

{

messageQueue.Dispose ();

}

      }

Nasledujúci zoznam kódov ilustruje, ako môžete spracovať správy uložené vo fronte správ pomocou jazyka C #.

privátny statický zoznam ReadQueue (cesta reťazca)

        {

Zoznam lstMessages = nový Zoznam ();

pomocou (MessageQueue messageQueue = nový MessageQueue (cesta))

            {

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

foreach (System.Messaging.Message message in messages)

                {

message.Formatter = nový XmlMessageFormatter (

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

string msg = message.Body.ToString ();

lstMessages.Add (správa);

                }

            }

vrátiť lstMessages;

        }

Ďalej môžete vyvolať metódu ReadQueue a načítať správy uložené vo fronte správ, ako je uvedené v útržku kódu nižšie.

reťazec cesta = @ ". \ Súkromné ​​$ \";

Zoznam lstMessages = ReadQueue (cesta);

Môžete tiež ukladať objekty do frontu správ. Predpokladajme napríklad, že musíte do frontu uložiť správu s protokolom. Protokol je uložený v inštancii triedy LogMessage, ktorá obsahuje potrebné vlastnosti, ktoré sa týkajú podrobností o protokole. Takto by vyzerala trieda LogMessage - zjednodušil som to iba pomocou dvoch vlastností.

verejná trieda LogMessage

    {

verejný reťazec MessageText {get; sada; }

public DateTime MessageTime {get; sada; }

    }

Mali by ste upraviť triedu LogMessage tak, aby obsahovala ďalšie potrebné vlastnosti, t. J. Závažnosť správy atď. Nasledujúca metóda ukazuje, ako môžete uložiť inštanciu triedy LogMessage do frontu správ.

private static void SendMessage (string queueName, LogMessage msg)

        {

MessageQueue messageQueue = null;

if (! MessageQueue.Exists (queueName))

messageQueue = MessageQueue.Create (queueName);

inak

messageQueue = nový MessageQueue (queueName);

skús

            {

messageQueue.Formatter = nový XmlMessageFormatter (nový typ [] {typeof (LogMessage)});

messageQueue.Send (správa);

            }

chytiť

            {

// Sem napíšete kód, aby ste mohli vykonať potrebnú chybu.

            }

konečne

            {

messageQueue.Close ();

            }          

        }

Nasledujúci úryvok kódu ilustruje, ako môžete vytvoriť inštanciu triedy LogMessage, naplniť ju údajmi a potom vyvolať metódu SendMessage na uloženie inštancie vytvorenej vo fronte správ.

LogMessage msg = new LogMessage ()

            {

MessageText = "Toto je testovacia správa.",

MessageTime = DateTime.Now

            };

SendMessage (@ ". \ Private $ \ Log", správa);

Nasledujúci zoznam kódov ilustruje, ako môžete čítať inštanciu LogMessage uloženú vo fronte správ.

súkromná statická LogMessage ReceiveMessage (reťazec queueName)

        {

if (! MessageQueue.Exists (queueName))

návrat null;

MessageQueue messageQueue = nový MessageQueue (queueName);

LogMessage logMessage = null;

skús

            {

messageQueue.Formatter = nový XmlMessageFormatter (nový typ [] {typeof (LogMessage)});

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

            }

chytiť {}

konečne

            {

messageQueue.Close ();

            }

vrátiť logMessage;

        }

$config[zx-auto] not found$config[zx-overlay] not found