Onsdag 6/11 8.45
Harry Halliwell, IBM Hursley
Halliwell började med att beskriva de fördelar som MQ kan ge
applikationerna:
Single multi-platform MQI
How single? Fler och fler plattformar (Level2)
klarar nu de mer avancerade möjligheterna som MQSeries erbjuder,
och skall till slut gälla alla, så att det inte finns någon
tveksamhet över vad som finns på vilka plattformar:
Time Independence
Det är en enkel grund i MQSeries, men den kan ge avancerade
möjligheter och är en av hörnstenarna i IBMs tanke på asynkron
meddelandehantering och programexekvering!
Det finns möjligheter i olika OS att hantera signaler;
MVS-ECB, Tandem-IPC, VMS-SYS$WAKE osv.
Halliwell berättade också att det går att skriva sin egen
triggermonitor, men att det var ganska svårt, och att det inte
var rekommenderat. Det var dock ett vanligt MQ-program, så det
var inget speciellt och annorlunda med det.
Då programmen inte har direkt kontakt, kan inte den sändande
applikationen ha full kontroll på hur mottagningen gått utan får
lugnt vänta på eventuellt svar. Timeouter vid väntan på dessa
svar är inget enkelt problem att lösa. Det som Halliwell dock rekommenderade
var att ha en svarskö på remote-queue managern med Message
Expiry. Svaret kommer då att ligga kvar ett tag och efter
timeouten raderas det. Det gäller då att ha en fungerande
timeout på den lokala queue managern, men det måste hanteras
logiskt i applikationen, tyvärr. Det finns ännu inget som
hanterar detta i MQ, men det är en av funktionerna i MQSeries Three Tier.
Det finns en del andra möjligheter för det här också; Slå
på rapporter från MQ vid olika händelser, eller kolla hur DLQn
ser ut, eller kanske få MQ att skicka tillbaka olevererade meddelanden
tillbaka till sändaren. En bra funktion är att få MQSeries att
skicka händelseinformation när vissa gränser har uppnåtts i
en queue manager, tex när antalet meddelanden i en kö har nått
en viss nivå, eller en kanal har stannat.
Det finns ett antal köer som hanterar dessa events; SYSTEM.ADMIN.PERFM.EVENT, SYSTEM.ADMIN.QMGR.EVENT, SYSTEM.ADMIN.CHANNEL.EVENT.
Assured Delivery
När meddelanden läggs in i köer skapas de som 'persistent'
eller 'non persistent'. Persistenta meddelanden garanteras av MQSeries
att de kommer fram till den kö de skickats till. Oavsett vad som
händer under tiden med kraschade system mm kommer dessa meddelanden
att återskapas vid recovery av queue managers. Till skillnad
från denna garanti hanteras icke-persistenta meddelanden utan
någon säkerhet. Om en queue manager dyker eller kraschar
garanterar inte MQSeries att det kommer att återskapas. De hanteras
dock snabbare än de persistenta meddelandena. Det gäller att
bestämma vilka meddelanden som är viktiga och vilka som inte
är det innan man tar igång sitt system.
När en queue manager startas om efter en krasch kommer den att
återskapa alla meddelanden som varit persistenta i alla köer.
Queue managern håller reda på allt som hänt i en kö från
tillfället då den senast var tom. data som förstörts av en krasch
på grund av HW eller OS ligger kvar i köerna utan att
upptäckas. Det är först vid eventuell leverans som meddelandet
kan orsaka problem. Kan behöva annan åtgärd.
När en applikation läser eller skriver ett meddelande finns
möjligheten att ange om MQSeries skall använda sig av syncpoint för
transaktionen. Om applikationen inte använder syncpoints
uppdateras kön direkt efter anropet och det finns ingen möjlighet
att ta tillbaka åtgärden. Däremot om MQSeries används i en
transaction genom att ange att syncpoint ska användas, kan allt
som skett sedan transaktionen startades tas tillbaka med rollback
(MQBACK). I en transaktion kan vissa MQPUTs och MQGETs
använda syncpoint och andra inte.
Koordination av transaktioner kan som sagt ske i MQSeries, men
det finns även möjligheter att använda en transaktionsmonitor
för detta. Det finns flera alternativ och det beror mest på vilket
OS man kör i. CICS eller Encina för Unix, CICS för MVS, CICS eller
Tuxedo (eller Encina) för Windows NT. MQSeries är
XA-kompatibelt (på en del plattformar tex Unix, NT) så vilken
transaktionshanterare som helst som följer XA kan användas på
de plattformarna. Med dessa transaktionshanterare får man också möjligheten
att använda MQSeries i större transaktioner med fler resurser inblandade,
för tex 2-phase-commits.
När det gäller syncpoints i en asynkron tillämpning finns det
andra alernativ än 2-phase-commits i en enda UOW, nämligen tre
UOWs med MQ som brygga (Se Welcome to
MQ-Series avsnittet om Security).
Det finns också möjligheter att se på ett meddelande hur
många gånger det blivit rollbackat. Det gör att om ett
meddelande tex inte kan sparas i en databas kommer det antalet
att öka, och programmet kan kolla det antalet för att se vad
det skall göra med meddelandet. Något måste göras för de
andra meddelandena ligger låsta bakom det problematiska
meddelandet.
MQ-klienter hanteras inte riktigt så som program i en MQ-server
så kolla det innan start!