Cu MSMQ (Microsoft Message Queue), dezvoltatorii de aplicații pot comunica rapid și fiabil cu aplicațiile, trimițând și primind mesaje. Procesarea mesajelor îți oferă o metodă sigură de încredere pentru a garanta mesageria și pentru a executa numeroase procese de afaceri.
MSMQ, la fel ca XML Web Services și .Net Remoting, este o tehnologie de dezvoltare distribuită. Totuși, atunci când se folosesc XML Web Services sau componente .Net Remoting, clientul trebuie să schimbe informații cu serverul în timp real, iar serverul trebuie să rămână online. MSMQ poate funcționa când serverul este offline, salvând temporar mesajul în coada de mesaje de pe partea clientului, apoi trimițându-l serverului pentru procesare când este online.
Evident, MSMQ nu este potrivit pentru situația în care clientul trebuie să răspundă la timp de la server, iar MSMQ interacționează cu serverul într-un mod asincron, deci nu este nevoie să vă faceți griji că veți aștepta prea mult timp ca serverul să proceseze.
Deși atât XML Web Services, cât și .Net Remoting oferă proprietatea [OneWay] pentru a gestiona apeluri asincrone, aceasta este folosită pentru a rezolva problema apelurilor lungi de metodă pe partea de server care blochează partea clientului pentru mult timp. Totuși, nu poate rezolva problema încărcării mari a clienților, iar serverul acceptă cererile mai repede decât poate procesa.
În general, atributul [OneWay] nu este folosit în serviciile specializate de mesagerie.
1. Termeni și concepte de bază
Un "mesaj" este o unitate de date transmisă între două calculatoare. Mesajele pot fi foarte simple, cum ar fi să conțină doar șiruri de text; Poate fi, de asemenea, mai complex și poate conține obiecte încorporate.
Mesajele sunt trimise la coadă. O "coadă de mesaje" este un container care stochează mesajele în timpul transmiterii acestora. Managerul cozii de mesaje acționează ca un intermediar atunci când retransmite mesajele de la sursă la destinație. Scopul principal al unei cozi este de a asigura rutarea și de a garanta livrarea mesajelor; Dacă destinatarul nu este disponibil când mesajul este trimis, coada de mesaje păstrează mesajul până când acesta poate fi livrat cu succes.
"Coada mesajelor" este tehnologia Microsoft de procesare a mesajelor care oferă capabilități de procesare și coadă a mesajelor pentru orice aplicație, în orice combinație de calculatoare cu Microsoft Windows instalat, indiferent dacă sunt pe aceeași rețea sau online în același timp.
O "rețea de coadă de mesaje" este orice grup de calculatoare care pot trimite mesaje între ele. Diferite calculatoare dintr-o rețea joacă roluri diferite în a asigura că mesajele sunt procesate fără probleme. Unele oferă informații de rutare pentru a determina cum se trimit mesaje, altele dețin informații importante despre întreaga rețea, iar altele pur și simplu trimit și primesc mesaje.
În timpul instalării cozii de mesaje, administratorii determină care servere pot comunica între ele și stabilesc roluri speciale pentru servere specifice. Calculatoarele care alcătuiesc această rețea de "cozi de mesaje" se numesc "site-uri" și sunt conectate între ele prin "legături site". Fiecare sitelink are un "overhead" asociat, determinat de administrator și indicând cât de des sunt livrate mesajele prin acest sitelink.
Administratorul cozii de mesaje configurează, de asemenea, unul sau mai multe calculatoare în rețea care acționează ca servere de rutare. Serverul de rutare analizează costul suplimentar al fiecărui sitelink pentru a determina cea mai rapidă și eficientă modalitate de a livra un mesaj prin mai multe site-uri pentru a determina cum să fie transmis mesajul.
2. Tipul cozii
Există două tipuri principale de cozi: cozi create de tine sau de alți utilizatori din rețeaua ta și cozi de sistem.
O coadă creată de utilizator poate fi oricare dintre următoarele:
Cozile publice sunt replicate pe întreaga rețea de cozi de mesaje și au potențialul de a fi accesate de toate site-urile conectate la rețea.
Cozile private nu sunt publicate în întreaga rețea. În schimb, acestea sunt disponibile doar pe calculatorul local unde se află. Cozile private pot fi accesate doar de aplicații care cunosc numele complet al căii sau eticheta cozii.
Coada de Management conține mesaje care recunosc primirile de mesaje trimise într-o rețea de cozi de mesaje date. Specifică coada de management pe care vrei să o folosească componenta MessageQueue, dacă există.
Coada de răspuns conține mesajele de răspuns care sunt returnate aplicației expeditoare atunci când aplicația țintă primește mesajul. Specifică coada de răspuns pe care vrei să o folosească componenta MessageQueue, dacă există.
Cozile generate de sistem sunt, în general, împărțite în următoarele categorii:
Coada jurnalului stochează opțional copii ale mesajelor trimise și copii ale mesajelor eliminate din coadă. O singură coadă de jurnal pe fiecare client Message Queue stochează o copie a mesajelor trimise de pe acel calculator. Se creează o coadă separată pentru fiecare coadă de pe server. Acest jurnal urmărește mesajele care sunt eliminate din acea coadă.
Coada de Scrisori Moarte stochează copii ale mesajelor care nu pot fi livrate sau care au expirat. Dacă un mesaj care expiră sau nu poate fi livrat este tranzacțional, acesta este stocat într-o coadă specială de litere moarte numită "coadă de litere moarte tranzacționale". Literele moarte sunt stocate pe calculatorul unde se află mesajul expirat. Pentru mai multe informații despre mesajele de timeout și expirare, vezi Proprietăți implicite ale mesajelor.
Coada de rapoarte conține mesaje care indică traseul pe care îl urmează mesajul pentru a ajunge la destinație și poate conține și mesaje de testare. Poate exista doar o singură coadă de raportare pe fiecare calculator.
O coadă dedicată de sistem este o serie de cozi dedicate care stochează mesajele de management și notificare de care un sistem are nevoie pentru a efectua operațiuni de procesare a mesajelor.
Majoritatea muncii realizate în aplicație implică accesarea cozilor publice și a mesajelor acestora. Totuși, în funcție de jurnalizarea, confirmarea și alte nevoi speciale de procesare ale aplicației, este probabil ca mai multe cozi diferite de sistem să fie folosite în operațiunile zilnice.
3. Comunicare sincronă vs. asincronă
Comunicarea în coadă este în mod inerent asincronă deoarece trimiterea și primirea mesajelor din coadă se face în procese diferite. De asemenea, operația de recepție poate fi efectuată asincron, deoarece persoana care dorește să primească mesajul poate chema metoda BeginReceive către orice coadă dată și poate continua imediat cu alte sarcini fără a aștepta un răspuns. Acest lucru este foarte diferit de ceea ce oamenii numesc "comunicare sincronă".
În comunicarea sincronă, expeditorul cererii trebuie să aștepte un răspuns de la destinatarul vizat înainte de a efectua alte sarcini. Timpul de așteptare al expeditorului depinde în totalitate de timpul necesar pentru ca destinatarul să proceseze cererea și să trimită răspunsul.
4. Interacțiunea cu cozile de mesaje
Procesarea mesajelor și mesageria oferă un mecanism puternic și flexibil pentru comunicarea între procese între componentele aplicațiilor bazate pe server. Acestea oferă mai multe avantaje față de invocarea directă între componente, inclusiv:
Stabilitate – Defecțiunile componentelor afectează mesajele mult mai puțin decât apelurile directe între componente, deoarece mesajele sunt stocate într-o coadă și rămân acolo până când sunt procesate corespunzător. Procesarea mesajelor este similară cu procesarea tranzacțiilor în sensul că procesarea mesajelor este garantată. Prioritizarea mesajelor – Mesajele mai urgente sau importante pot fi primite înaintea celor relativ neimportante, astfel încât poți garanta un timp adecvat de răspuns pentru aplicațiile critice. Capacitate offline – Când mesajele sunt trimise, ele pot fi trimise într-o coadă temporară și pot rămâne acolo până când sunt livrate cu succes. Când accesul la coada dorită nu este disponibil din orice motiv, utilizatorul poate continua acțiunea. În același timp, alte operațiuni pot continua ca și cum mesajul ar fi fost procesat, deoarece livrarea mesajelor este garantată atunci când conexiunea de rețea este restaurată. Procesarea tranzacțională a mesajelor – Cuplați mai multe mesaje conexe într-o singură tranzacție pentru a vă asigura că mesajele sunt livrate secvențial, o singură dată, și pot fi recuperate cu succes din coada de destinație. Dacă există erori, întreaga tranzacție este anulată. Securitate – Tehnologia de coadă a mesajelor pe care se bazează componenta MessageQueue folosește Windows Security pentru a securiza controlul accesului, a oferi auditare și a cripta și autentifica mesajele trimise și primite de componentă.
5. Scrierea unui program simplu de coadă de mesaje în mediul .Net
(1) Instalați mai întâi serviciile de coadă a mesajelor
Instalează MSMQ prin Panoul de Control, pasul "Adaugă/Elimină programe" – "Adaugă/Elimină componente Windows".
MSMQ poate fi instalat fie în modul grup de lucru, fie în modul domeniu. Dacă instalatorul nu găsește un server care rulează o coadă de mesaje care oferă servicii de directoare, acesta poate fi instalat doar în modul grup de lucru, iar Coada de mesaje de pe acest calculator suportă doar crearea de cozi private și crearea de conexiuni directe către alte calculatoare care rulează cozi de mesaje.
(2) Configurarea MSMQ
Deschide Managementul Calculatoarelor – Coadă de mesaje și creează o coadă MSMQDemo sub cozi private
(3) Scrie cod – demonstrează pur și simplu obiectul MSMQ
Clasa MessageQueue este un wrapper în jurul unei "cozi de mesaje". Clasa MessageQueue oferă o referință la coada Message Queue. Poți specifica o cale către o resursă existentă în constructorul MessageQueue sau poți crea o coadă nouă pe server. Înainte să poți chema Send, Peek sau Receive, trebuie să asociezi o nouă instanță a clasei MessageQueue cu o coadă existentă.
MessageQueue suportă două tipuri de recuperare a mesajelor: sincronă și asincronă. Metodele sincronizate Peek și Receive determină firul de proces să aștepte sosirea unui mesaj nou la coadă la un interval specificat. Metodele asincrone BeginPeek și BeginReceive permit sarcinii principale a aplicației să continue executarea într-un fir separat înainte ca mesajul să ajungă la coadă. Aceste metode funcționează folosind obiecte de callback și obiecte de stare pentru a facilita comunicarea informației între fire.
Descărcare cod sursă:
Turiști, dacă vreți să vedeți conținutul ascuns al acestei postări, vă rog Răspunde
|