Met MSMQ (Microsoft Message Queue) kunnen applicatieontwikkelaars snel en betrouwbaar communiceren met applicaties door berichten te verzenden en ontvangen. Berichtverwerking biedt u een betrouwbare failsafe methode voor gegarandeerde berichtenverdeling en het uitvoeren van veel bedrijfsprocessen.
MSMQ is, net als XML Web Services en .Net Remoting, een gedistribueerde ontwikkeltechnologie. Bij gebruik van XML Web Services of .Net Remote-componenten moet de client echter informatie in realtime uitwisselen met de server, en moet de server online blijven. MSMQ kan werken wanneer de server offline is, waarbij het bericht tijdelijk wordt opgeslagen in de berichtwachtrij aan de clientzijde en vervolgens naar de server wordt gestuurd voor verwerking wanneer het online is.
Het is duidelijk dat MSMQ niet geschikt is voor situaties waarin de client tijdig van de server moet reageren, en MSMQ asynchroon met de server communiceert, dus er is geen reden om je zorgen te maken over het lang wachten tot de server verwerkt.
Hoewel zowel XML Web Services als .Net Remoting de [OneWay]-eigenschap bieden om asynchrone aanroepen af te handelen, wordt deze gebruikt om het probleem op te lossen van lange methode-aanroepen aan de serverzijde die de clientzijde lange tijd blokkeren. Het kan echter het probleem van grote clientbelasting niet oplossen, en de server accepteert verzoeken sneller dan hij kan verwerken.
In het algemeen wordt het [OneWay]-attribuut niet gebruikt in gespecialiseerde berichtendiensten.
1. Basistermen en concepten
Een "bericht" is een gegevenseenheid die tussen twee computers wordt verzonden. Berichten kunnen heel eenvoudig zijn, zoals alleen tekststrings bevatten; Het kan ook complexer zijn en kan ingebedde objecten bevatten.
Berichten worden naar de wachtrij gestuurd. Een "berichtwachtrij" is een container die berichten vasthoudt tijdens hun verzending. De bericht wachtrijbeheerder fungeert als tussenpersoon bij het doorgeven van berichten van de bron naar de bestemming. Het hoofddoel van een wachtrij is het verzorgen van routing en het garanderen van de bezorging van berichten; Als de ontvanger niet beschikbaar is wanneer het bericht wordt verzonden, houdt de berichtwachtrij het bericht vast totdat het succesvol kan worden afgeleverd.
"Message Queuing" is Microsofts berichtverwerkingstechnologie die berichtverwerking en berichten in wachtrij biedt voor elke applicatie in elke combinatie van computers met Microsoft Windows geïnstalleerd, ongeacht of ze zich op hetzelfde netwerk bevinden of tegelijkertijd online zijn.
Een "berichtenwachtrijnetwerk" is elke groep computers die berichten heen en weer naar elkaar kunnen sturen. Verschillende computers in een netwerk spelen verschillende rollen om ervoor te zorgen dat berichten soepel worden verwerkt. Sommige geven routeringsinformatie om te bepalen hoe berichten verzonden moeten worden, sommige bevatten belangrijke informatie over het hele netwerk, en sommige verzenden en ontvangen simpelweg berichten.
Tijdens de installatie van de Message Queue bepalen beheerders welke servers met elkaar kunnen communiceren en stellen ze speciale rollen in voor specifieke servers. De computers die dit netwerk van "berichtwachtrijen" vormen, worden "sites" genoemd, en ze zijn met elkaar verbonden via "site links." Elke sitelink heeft een bijbehorende "overhead" die door de beheerder wordt bepaald en aangeeft hoe vaak berichten via deze sitelink worden geleverd.
De Message Queue-beheerder stelt ook één of meer computers in het netwerk op die fungeren als Routingservers. De routeringsserver kijkt naar de overhead van elke sitelink om de snelste en meest efficiënte manier te bepalen om een bericht via meerdere sites te bezorgen en zo te bepalen hoe het bericht kan worden afgeleverd.
2. Wachtrijtype
Er zijn twee hoofdtypen wachtrijen: wachtrijen die door u of andere gebruikers in uw netwerk zijn aangemaakt, en systeemwachtrijen.
Een door gebruikers gemaakte wachtrij kan uit een van de volgende bestaan:
Publieke wachtrijen worden gerepliceerd over het gehele Message Queue-netwerk en kunnen worden benaderd door alle sites die op het netwerk zijn aangesloten.
Privéwachtrijen worden niet over het hele netwerk gepubliceerd. In plaats daarvan zijn ze alleen beschikbaar op de lokale computer waar ze zich bevinden. Privéwachtrijen kunnen alleen worden benaderd door applicaties die de volledige padnaam of het label van de wachtrij kennen.
De Management Queue bevat berichten die de ontvangst van berichten bevestigen die in een bepaald Message Queue-netwerk zijn verzonden. Specificeer de managementwachtrij die je wilt dat de MessageQueue-component gebruikt, indien aanwezig.
De Response Queue bevat de antwoordberichten die worden teruggestuurd naar de verzendende applicatie wanneer de doelapplicatie het bericht ontvangt. Geef de responswachtrij aan die je wilt dat de MessageQueue-component gebruikt, indien aanwezig.
De wachtrijen die door het systeem worden gegenereerd, worden doorgaans onderverdeeld in de volgende categorieën:
Journal Queue slaat optioneel kopieën op van verzonden berichten en kopieën van berichten die uit de wachtrij zijn verwijderd. Een enkele journal queue op elke Message Queue-client slaat een kopie op van berichten die van die computer zijn verzonden. Voor elke wachtrij op de server wordt een aparte dagboekwachtrij aangemaakt. Dit journal houdt berichten bij die uit die wachtrij worden verwijderd.
De Dead Letter Queue bewaart kopieën van berichten die niet kunnen worden afgeleverd of verlopen zijn. Als een bericht dat verloopt of niet kan worden afgeleverd transactioneel is, wordt het opgeslagen in een speciale dode letterwachtrij die een "transactionele dode briefwachtrij" wordt genoemd. Dode letters worden opgeslagen op de computer waar het verlopen bericht zich bevindt. Voor meer informatie over time-out en vervalberichten, zie Eigenschappen van standaardberichten.
De Report Queue bevat berichten die aangeven welke route het bericht neemt om de bestemming te bereiken, en kan ook testberichten bevatten. Er kan maar één rapportagewachtrij op elke computer zijn.
Een speciale systeemwachtrij is een reeks toegewijde wachtrijen die de beheer- en meldingsberichten opslaan die een systeem nodig heeft om berichtverwerkingsoperaties uit te voeren.
Het meeste werk in de applicatie bestaat uit het benaderen van publieke wachtrijen en hun berichten. Afhankelijk van de journaling-, bevestigings- en andere speciale verwerkingsbehoeften van de applicatie is het echter waarschijnlijk dat er meerdere verschillende systeemwachtrijen worden gebruikt in de dagelijkse operaties.
3. Synchrone versus asynchrone communicatie
Wachtrijcommunicatie is van nature asynchroon omdat het verzenden van berichten naar en het ontvangen van berichten vanuit de wachtrij in verschillende processen gebeurt. Ook kan de ontvangstoperatie asynchroon worden uitgevoerd, omdat de persoon die het bericht wil ontvangen de BeginReceived-methode naar een willekeurige wachtrij kan aanroepen en direct doorgaat met andere taken zonder op antwoord te wachten. Dit is heel anders dan wat mensen kennen als "synchrone communicatie".
Bij synchrone communicatie moet de verzender van het verzoek wachten op een antwoord van de beoogde ontvanger voordat hij andere taken uitvoert. De tijd die de afzender wacht hangt volledig af van de tijd die de ontvanger nodig heeft om het verzoek te verwerken en het antwoord te versturen.
4. Interactie met berichtwachtrijen
Berichtverwerking en messaging bieden een krachtig en flexibel mechanisme voor interprocescommunicatie tussen servergebaseerde applicatiecomponenten. Ze bieden verschillende voordelen ten opzichte van directe aanroep tussen componenten, waaronder:
Stabiliteit – Componentstoringen beïnvloeden berichten veel minder dan directe oproepen tussen componenten, omdat berichten in een wachtrij worden opgeslagen en daar blijven totdat ze correct zijn verwerkt. Berichtverwerking lijkt op transactieverwerking doordat berichtverwerking gegarandeerd is. Prioriteit van berichten – Dringendere of belangrijkere berichten kunnen eerder worden ontvangen dan relatief onbelangrijke berichten, zodat u voldoende responstijd voor kritieke toepassingen kunt garanderen. Offline functionaliteit – Wanneer berichten worden verzonden, kunnen ze naar een tijdelijke wachtrij worden gestuurd en daar blijven totdat ze succesvol zijn afgeleverd. Wanneer toegang tot de gewenste wachtrij om welke reden dan ook niet beschikbaar is, kan de gebruiker doorgaan met de actie. Tegelijkertijd kunnen andere bewerkingen doorgaan alsof het bericht is verwerkt, omdat de berichtaflevering gegarandeerd is wanneer de netwerkverbinding wordt hersteld. Transactionele berichtverwerking – Koppel meerdere gerelateerde berichten in één transactie om ervoor te zorgen dat berichten achtereenvolgens worden afgeleverd, slechts één keer, en succesvol kunnen worden opgehaald uit hun bestemmingswachtrij. Als er fouten zijn, wordt de volledige transactie geannuleerd. Security – De message queuing-technologie waarop de MessageQueue-component is gebaseerd, gebruikt Windows Security om toegangscontrole te beveiligen, auditing te bieden en berichten die door de component worden verzonden en ontvangen te versleutelen en authenticeren.
5. Schrijf een eenvoudig berichtwachtrijprogramma in de .Net-omgeving
(1) Eerst Message Queuing Services installeren
Installeer MSMQ via het Configuratiescherm, de stap "Programma's toevoegen/verwijderen" – "Windows-componenten toevoegen/verwijderen".
MSMQ kan worden geïnstalleerd in zowel werkgroepmodus als domeinmodus. Als de installer geen server vindt die een berichtenwachtrij draait en directorydiensten levert, kan deze alleen in werkgroepmodus worden geïnstalleerd, en ondersteunt de Berichtwachtrij op deze computer alleen het aanmaken van privéwachtrijen en het aanmaken van directe verbindingen met andere computers die berichtwachtrijen draaien.
(2) MSMQ configureren
Open Computer Management – Message Queuing en maak een MSMQDemo-wachtrij aan onder Private Queues
(3) Code schrijven - gewoon het MSMQ-object demonstreren
De MessageQueue-klasse is een wrapper rond een "message queue". De MessageQueue-klasse biedt een verwijzing naar de Message Queue-wachtrij. Je kunt een pad naar een bestaande resource specificeren in de MessageQueue-constructor, of je kunt een nieuwe wachtrij op de server aanmaken. Voordat je Verzenden, Peek of Ontvangen kunt aanroepen, moet je een nieuwe instantie van de MessageQueue-klasse koppelen aan een bestaande wachtrij.
MessageQueue ondersteunt twee soorten berichtopvraging: synchroon en asynchroon. De gesynchroniseerde Peek and Receive methoden zorgen ervoor dat de procesthread wacht op een nieuw bericht dat op een bepaald interval bij de wachtrij aankomt. De asynchrone BeginPeek- en BeginReceived-methoden stellen de hoofdapplicatietaak in staat om in een aparte thread verder te worden uitgevoerd voordat het bericht de wachtrij bereikt. Deze methoden werken door callback-objecten en toestandsobjecten te gebruiken om informatiecommunicatie tussen threads te vergemakkelijken.
Broncode downloaden:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
|