donderdag 4 oktober 2007

WebSphere MQ voor beginners


Er zijn verschillende manieren/protocollen om berichten tussen systemen uit te wisselen. Een veel gebruikte manier is met behulp van het door IBM ontwikkelde WebSphere MQ. De configuratie van een MQ omgeving zorgt snel voor onduidelijkheid door de grote hoeveelheid aan elkaar te koppelen componenten, waaronder queues, transmission queues, queue managers, en channels. In deze wiki pagina zal ik een inleiding geven in hoe een MQ omgeving op te zetten.

Om het geheel wat inzichtelijker te maken zal ik dit doen aan de hand van een voorbeeld waarbij twee systemen, genaamd Alice en Bob, berichten met elkaar willen kunnen uitwisselen.


Terminologie

Ik zal eerst de belangijkste termen uitleggen.
message Aangezien Alice en Bob informatie willen kunnen uitwisselen zullen ze informatie moeten kunnen delen. Deze informatie kan worden opgedeeld in pakketjes. Eén zo'n pakketje informatie wordt en bericht oftewel message genoemd.

queue De uitwisseling van berichten kan worden gezien als het plaatsen van een bericht in een brievenbus/postvak van de ontvanger. Omdat meerdere berichten in één brievenbus geplaatst kunnen worden, vormen deze berichten een rij (welke overigens niet per definitie in volgorde van binnenkomst wordt afgewerkt). Je plaatst dus een bericht op een zogenaamde queue van de ontvanger. In ons voorbeeld kan Alice een bericht plaatsen op een queue van Bob en vice versa.

channel Als Alice een bericht in een brievenbus van Bob wil plaatsen, dan moet ze wel weten waar ze die brievenbus kan vinden én hoe ze er kan komen. Ze moet dus eigenlijk de weg weten naar Bob. Deze weg wordt ook wel kanaal, of channel genoemd.

queue manager Omdat Alice en Bob niet alles zelf willen regelen maken ze gebruik van hun eigen postbode. De postbodes van Alice en Bob kennen elkaar en hebben een weg (channel) afgesproken waarop ze elkaar kunnen ontmoeten om post over te dragen. De postbode beheert dus de post en zorgt dat deze op de plaats van bestemming aankomt door in contact te treden met andere postbodes. De postbode wordt ook wel queue manager (oftewel postvak beheerder) genoemd. Alice en Bob willen eventueel ook met anderen kunnen communiceren zodat ze meerdere brievenbussen (queue) kunnen hebben. Deze kunnen echter wel allemaal door één postbode beheerd worden.

transmission queue Als Alice een bericht naar Bob stuurt, geeft ze deze niet direct aan de postbode, maar legt ze deze in een postvak met de naam "UIT naar Bob". Op deze manier ziet de postbode dat er een bericht naar Bob gestuurd moet worden en verzorgt hij de aflevering. Hij gooit het bericht in zijn fietstas. Zo'n fietstas heet in WebSphere MQ wereld een transmission queue.

Er zijn nog enkele begrippen die ook van belang zijn om bovenstaande uitleg wat meer te detaileren:

request/response messages Vaak is het zo dat er de berichtenstroom een vraag/antwoord karakter heeft: de één vraagt en de ander antwoord. In dat geval is een vragend bericht een request message en het antwoord erop een response message.

correlation identifier Als Alice een vraag stelt aan Bob dan is het wel handig als ze weet welk bericht het antwoord op haar vraag bevat. Zeker als in het antwoord de vraag niet herhaald wordt of als ze snel achter elkaar meerdere vragen stelt zonder op antwoorden te wachten. Om dit probleem op de lossen nummert Alice alle vragen met een uniek nummer. Bob zet dit nummer boven ieder antwoord zodat Alice precies kan zien welk antwoord op welke vraag volgt. Dit unieke nummer wordt correlation identifier genoemd.

local/remote queue Een postvak kan lokaal zijn bij de gebruiker zelf, of op afstand bij een ander persoon. De postvakken van Alice zijn voor haar lokaal (local queues) en de postvakken van Bob zijn voor Alice op afstand (remote queues). Het postvak IN van Alice is voor haar dus een local queue en het postvak "Uit naar Bob" is dus een remote queue.

sender/receiver channel Zoals gezegd spreken postbodes met elkaar af om berichten over te dragen. Als Alice een bericht naar Bob stuurt volgt de postbode van Alice de versturende weg (sender channel) en de postbode van Bob de ontvangende weg (receiver channel). Dit is zo omdat er op sommige wegen slechts éénrichtsverkeer mogelijk is. De weg van Alice naar Bob is dus niet altijd dezelfde weg als die van Bob naar Alice.


De berichtuitwisseling

Stel dat Alice aan Bob een uitnodiging stuurt voor een etentje, dat vervolgens door Bob (hopelijk) positief wordt beantwoordt. Hoe gaat dat dan? We zullen het protocol stap voor stap doorlopen.


  1. Alice stelt het bericht op en plaatst het in haar postvak "UIT naar Bob";

  2. Alice' postbode pikt het bericht op en gooit het in zijn fietstas;

  3. Alice' postbode brengt het bericht via de voor hem bekende weg naar de postbode van Bob, die al staat te wachten;

  4. Alice' postbode overhandigt het bericht aan Bob's postbode;

  5. Bob' postbode plaatst het bericht in Bob's postvak IN;

  6. Bob leest het bericht;

  7. Bob stelt een antwoordbericht op en plaatst het in zijn postvak "UIT naar Alice";

  8. Bob's postbode pikt het antwoordbericht op;

  9. Bob's postbode brengt het antwoordbericht via de voor hem bekende weg naar Alice' postbode;

  10. Bob's postbode overhandigt het antwoordbericht aan Alice' postbode;

  11. Alice' postbode plaatst het antwoordbericht in Alice' postvak IN;

  12. Alice leest het antwoordbericht.

In MQ terminologie staat er het volgende. We doen het maar even in het Engels aangezien alle termen Engels zijn:


  1. Alice puts a message in her remote queue to Bob;

  2. Alice's queue manager picks up the message and puts it in the transmission queue;

  3. Alice's queue manager sends the message via the sender channel to Bob;

  4. Bob's queue manager receives the message via the receiver channel from Alice;

  5. Bob's queue manager puts the message in Bob's local queue;

  6. Bob reads the (request) message;

  7. Bob puts a (response) message in his remote queue to Alice;

  8. Bob's queue manager picks up the message and puts it in the transmission queue;

  9. Bob's queue manager sends the message via the sender channel to Alice;

  10. Alice's queue manager receives the message via the receiver channel from Bob;

  11. Alice's queue manager puts the message in Alice's local queue;

  12. Alice reads the (response) message

Bovenstaande opzet wordt weergegeven in het schema.