Download - Mq basic v2.1
Websphere MQ Series
Immaginiamo uno scenario molto comune
SYS1 SYS2
Copiare, spostare informazioni da un sistema ad un altro
Cosa dobbiamo considerare?
Immaginiamo uno scenario molto comune
SYS1 SYS2
CommitmentAtomicitàUna sola copia del messaggio presente nei sistemi
SYS1 SYS2
CharsetA round-trip conversion ensures the integrity of all character data from the source CCSID to the target CCSID and back to the source
E4B8ADE59BBD???????????中国
Websphere MQ Series – Concetti di base
▪Message & Queing
– Cos’è...•MOM – Message Oriented Middelware
– Middelware: uno strato di astrazione – software bridge tra diversi sistemi
– Prodotti•Websphere MQ •Oracle Advanced Queing (OAQ)•Microsoft MSMQ•Open Source (JBoss Messaging, Apache Active MQ, )
• Java ha definito un’interfaccia: JMS
Websphere MQ Series
▪MQ = ComunicazioneProgamma-Programma
▪M=Messaging– I programmi comunicano tra di
loro tramite Messaggi, non chiamandosi vicendevolmente
▪Q=Queing– I messaggi si propagano tramite
Code; non devono quindi essere eseguiti in maniera concorrente
Websphere MQ Series – Concetti di base
▪Messaggio
•Qualsiasi blocco di informazioni da scambiare
• la struttura NON deve essere conosciuta da MQ
• lunghezza virtualmente illimitata, contenuti
•CCSID round-trip
•Qualche standard nella formattazione
Messaggi che attraversano una coda
Websphere MQ Series – Concetti di base
▪Code
•Contenitore di messaggi
•su i5 l’oggetto CODA e’ implementata con JRN/JRNRCV + streamfiles in IFS
Websphere MQ Series – Concetti di base
▪Sincrono/Asincrono– SINCRONO
• L’applicativo invia una richiesta e rimane in attesa di una risposta• Richiede le parti attive contemporaneamente• Un’applicazione interattiva potrebbe aver necessità di richiedere informazioni a un
altro sistema e aver necessità immediata della risposta e, contemporaneamente, accodare richieste che possono essere eseguite in un secondo momento
- es. verifica di disponibilità + creazione ed invio di una lettera/e-mail
– ASINCRONO• L’applicativo invia una richiesta/messaggio, il controllo puo’ esserci ma e’ futuro• I servizi non necessariamente devono essere disponibili contemporaneamente• Il poter *rimandare* certe operazioni permette di sganciare l’applicazione
immediatamente e migliorare le prestazioni generali del sistema• I’invio BROADCAST di un messaggio spesso è un’operazione asincrona
- Tabelloni informativi- Pubblicazione di bollettini- Replica di informazioni batch
• Asincrono NON significa LENTO
Analogia con TRG
Analogia con JRN
Websphere MQ Series – Concetti di base
▪Sincrono
+– Semplice– La riuscita e’ immediatamente verificata– Semplice error-recovery (solitamente)– Ottimi tempi di risposta per real-time (soltiamente
-
– I servizi di entrambe le parti devono essere attivi– Il blocco delle le risorse e’ vincolato alla risposta
Websphere MQ Series – Concetti di base
▪Asincrono
+– Le richieste non devono essere indirizzate ad un particolare server– I servizi sulla macchina destinazione possono essere down– Nessun blocco di risorse per attesa
-
– I tempi di risposta possono essere non definiti/non definibili– La gestione degli errori puo’ essere piu’ complessa– Il disegno dell’applicazione puo’ essere piu’ difficiel
Websphere MQ Series▪Ridotta complessità nella fase di integrazione (Stima tIntegrazione
25%)– Semplicità nell’utilizzo delle API– Compatibilità delle API per circa 80 diverse piattaforme
– Eliminazione della logica relativa a DATA-MOVEMENT e STORAGE business logic
Websphere MQ Series▪Ridotta complessità nella gestione
– WebSphere MQ Explorer tool (amministrazione remota) - Eclypse framework
Websphere MQ Series
▪WebSphere MQ Explorer tool (amministrazione remota) - Eclypse framework
▪Anche per i5:▪Deve esistere SYSTEM.MQEXPLORER.REPLY.MODEL (*MDL)▪Deve essere in funzione un LISTENER
STRMQMLSR PORT(1414)
▪Deve essere in funzione il CMDServer STRMQMCSVR MQMNAME(QM.COL)
Websphere MQ Series▪File transfer (no i5)
– Nuova applicazione per File Transfer (dalla V6)– via GUI o via Script lanciati da applicazioni o triggerati da sistema
▪Time-independent processing– Partner in differenti time-zones– Invio dei dati e certezza della consegna– Disaccoppiamento delle applicazioni
• (sistemi up-down in differenti momenti)– Invio asincrono (+performante)
▪Virtualmente si può integrare qualsiasi sistema
Websphere MQ Series – Concetti di base
▪Disaccoppiamento
– Solo con Transazioni Asincrone– Diversi sistemi (up and down)– es.: paradigma Publish/subscribe
• Chi pubblica non sa a priori a chi invierà i messaggi
•C’è un’entità intermedia [Broker]• Il sottoscrittore decide di ricevere messaggi di proprio interesse
Websphere MQ Series – Concetti di base
▪Persistenza– Non sempre c’e’ necessità di conservare il messaggio in caso
di restart di una coda•Tabelloni informativi
– E’ piu’ impegnativa dal punto di vista performances
Websphere MQ Series: Semplificazione
▪Portabilità lato Server
Server• AIX• HP-UX• i5• Linux• Solaris• Windows• z/OS• ...
Websphere MQ Series: Affidabilità e Integrità
Commitment - Transazioni– Vengono onorati Commit/Rollback nelle applicazioni native rpg
Architettura basata su un singolo QManager
▪Le applicazioni risiedono sulla stessa macchina
▪Il Qmanager provvede all’inoltro dei messaggi (asincroni)
Architettura basata su un singolo QManager
▪Le applicazioni risiedono sulla stessa macchina o su una diversa macchina
▪IL Qmanager provvede all’inoltro dei messaggi (asincroni)
▪Le applicazioni connesse sono dei CLIENTS del QManager
▪i client hanno limitazioni– Distanza– Disponibilità del servizio
▪L’approccio alla modalità client è scalabile
– da client a server (+QMAnager)
Architettura basata su più QManager
Websphere MQ Series
Scrivere su una coda
qmHandle=yMQConn('MQFER400'); // connect
qHandle=yMQOpen(qmHandle : ObjDescr1 : Options1 ); // open
yMqPut(qmHandle:qHandle : msg_PutDescr1 : msg_PutOption1 : %len(%trim(dati)): %addr(dati)); //put data
yMQClose(qmHandle:qHandle:Options1); //close
yMQDisc(qmHandle); // disconnect
Websphere MQ Series
Leggere da una coda
qmHandle=yMQConn('MQFER400'); // connect
qHandle=yMQOpen(qmHandle : ObjDescr1 : Options1 ); // open
DatiLen= yMqGet(qmHandle: qHandle : msg_GETDescr1:msg_GETOption1 :%len(dati):b_ ); //get data
yMQClose(qmHandle:qHandle:Options1); //close
yMQDisc(qmHandle); // disconnect
Program-to-progam, 2 sistemi
Canale Canale:• TCP/IP• SNA• IPX• ...
Server_1
Server_2
Remote Queue
Local Queue
Websphere MQ Series
Websphere MQ Series – CODE...
Local QUEUE Coda <Reale>
Remote QUEUE Struttura che descrive una coda
Tx QUEUE (xmitQ) Local Q con compiti speciali
Init QUEUE Local Q con compiti speciali
Websphere MQ Series
PGM
CFG
Non guardate i contenuti ma osservate l’isolamento programma-configurazione
Websphere MQ Series – Implementazione su i5
▪ QMQM (*LIB)▪ QMxxxxxxxx (*LIB) da V7 Naming…▪ QMQMSAMP (*LIB)▪ QMQM/QMQM (*SBSD)▪ QMQM, QMQMADM (*USRPRF)▪ AMQ* (*JRN-*JRNRCV)▪ /QIBM/UserData/mqm (*DIR)▪ /QIBM/ProdData/mqm (*DIR)
Red=oggetti interessati al salvataggio dati Utente
Il Sottosistema QMQM
i Qmanager (WRKMQM)
STRSBS QMQM/QMQM[14=Start] oppure STRMQM …
Se non e’ attivo QMQM non si possono avviare i Qmanager
STRMQMCSVR MQMNAME(QM.COL)Abilita diverse funzioni: (MQExplorer, STRMQMMQSC )
Canali… SENDER
Canali… Cosa occorre controllare?
RUNNING --> OKSTOPPED --> Canale disabilitatoRETRYING --> tentativi di riconnessioneINACTIVE --> OK
I log….
I log….
Il Rimozione ricevitori MQ
RCDMQMIMG OBJ(*ALL) OBJTYPE(*ALL) MQMNAME(QM.COL) DSPJRNDTA(*YES)
Un esempio di configurazione
Un esempio di configurazione
RQQ=MYP.LABEL00Q.OUTRMTQM=MQMAS400RMTQ=MYP.LABEL00QTQ=MQFER400.MQMAS400.TQ
TQ-LQQ=MQFER400.MQMAS400.TQUSAGE=XMITQ
Channel - SDRCH=MQFER400.MQMAS400CN=targethost(1414)TQ=MQFER400.MQMAS400.TQ
Channel - RCVCH=MQFER400.MQMAS400
STRMQMLSR 1414 MQMNAME(MQMAS400)
LQQ=MYP.LABEL00Q
QMGR=MQFER400 QMGR=MQMAS400
1
2
4
5
6
3
Websphere MQ Series - Automatismi
Triggering di un Canale
Attiva automaticamente un canale SDR
non interessa l’applicativo
config: specifica quale canale attivare a fronte di un MSG in partenza
Un esempio di configurazione
RQQ=MYP.LABEL00Q.OUTRMTQM=MQMAS400RMTQ=MYP.LABEL00QTQ=MQFER400.MQMAS400.TQ
TQ-LQQ=MQFER400.MQMAS400.TQUSAGE=XMITQTRIGGER=YESTRGDATA=MQFER400.MQMAS400INITQ=MQFER400.MQMAS400.CHINITQ
LQQ=MQFER400.MQMAS400.CHINITQ
STRMQMCHLI QNAME(MQFER400.MQMAS400.CHINITQ)MQMNAME(MQFER400) - (Channel initiator)
STRMQMCSVR MQMNAME(MQFER400)
Channel - SDRCH=MQFER400.MQMAS400CN=targethost(1414)TQ=MQFER400.MQMAS400.TQ
Channel - RCVCH=MQFER400.MQMAS400
STRMQMLSR 1414 MQMNAME(MQMAS400)
LQQ=MYP.LABEL00Q
QMGR=MQFER400 QMGR=MQMAS400
1
23
4
6
7
8
5
a
Un esempio di configurazione
RQQ=MYP.LABEL00Q.OUTRMTQM=MQMAS400RMTQ=MYP.LABEL00QTQ=MQFER400.MQMAS400.TQ
TQ-LQQ=MQFER400.MQMAS400.TQUSAGE=XMITQTRIGGER=YESTRGDATA=MQFER400.MQMAS400INITQ=MQFER400.MQMAS400.CHINITQ
LQQ=MQFER400.MQMAS400.CHINITQ
STRMQMCHLI QNAME(MQFER400.MQMAS400.CHINITQ)MQMNAME(MQFER400) - (Channel initiator)
STRMQMCSVR MQMNAME(MQFER400)
Channel - SDRCH=MQFER400.MQMAS400CN=targethost(1414)TQ=MQFER400.MQMAS400.TQ
Channel - RCVCH=MQFER400.MQMAS400
STRMQMLSR 1414 MQMNAME(MQMAS400)
LQQ=MYP.LABEL00Q
QMGR=MQFER400 QMGR=MQMAS400
1
Websphere MQ Series - Automatismi
▪Triggering di una Coda– rileva messaggio in arrivo su una coda– profondità...
Programma in ascolto - generico
Scodatore specializzato
Un esempio di configurazione
RQQ=MYP.LABEL00Q.OUTRMTQM=MQMAS400RMTQ=MYP.LABEL00QTQ=MQFER400.MQMAS400.TQ
TQ-LQQ=MQFER400.MQMAS400.TQUSAGE=XMITQTRIGGER=YESTRGDATA=MQFER400.MQMAS400INITQ=MQFER400.MQMAS400.CHINITQ
LQQ=MQFER400.MQMAS400.CHINITQ
STRMQMCHLI QNAME(MQFER400.MQMAS400.CHINITQ)MQMNAME(MQFER400) - (Channel initiator)
STRMQMCSVR MQMNAME(MQFER400)
Channel - SDRCH=MQFER400.MQMAS400CN=targethost(1414)TQ=MQFER400.MQMAS400.TQ
Channel - RCVCH=MQFER400.MQMAS400
STRMQMLSR 1414 MQMNAME(MQMAS400)
LQQ=MYP.LABEL00QINITQ=MYMQ.INITQPRC=MQMAS400.PROCESS
LQQ=MYMQ.INITQ(alimentata da TRG)
PRCPRC=MQMAS400.PROCESS(Fittizio, viene alimentata la INITQ)
QMGR=MQFER400 QMGR=MQMAS400
1
3
2
Un esempio di configurazione
Channel - RCVCH=MQFER400.MQMAS400
LQQ=MYP.LABEL00QINITQ=MYMQ.INITQPRC=MQMAS400.PROCESS
LQQ=MYMQ.INITQ(alimentata da TRG)
PRCPRC=MQMAS400.PROCESS
UserProgram:MQGET in ascolto su INITQ
FormatoMessaggio: TriggerData:Contiene NOME della Coda che ha scatenato l’evento TRG:MYP.LABEL00Q
Puo’ sottomettere/lanciare JOB che scoda
Un esempio di configurazione
RQQ=MYP.LABEL00Q.OUTRMTQM=MQMAS400RMTQ=MYP.LABEL00QTQ=MQFER400.MQMAS400.TQ
TQ-LQQ=MQFER400.MQMAS400.TQUSAGE=XMITQTRIGGER=YESTRGDATA=MQFER400.MQMAS400INITQ=MQFER400.MQMAS400.CHINITQ
LQQ=MQFER400.MQMAS400.CHINITQ
STRMQMCHLI QNAME(MQFER400.MQMAS400.CHINITQ)MQMNAME(MQFER400) - (Channel initiator)
STRMQMCSVR MQMNAME(MQFER400)
Channel - SDRCH=MQFER400.MQMAS400CN=targethost(1414)TQ=MQFER400.MQMAS400.TQ
Channel - RCVCH=MQFER400.MQMAS400
STRMQMLSR 1414 MQMNAME(MQMAS400)
LQQ=MYP.LABEL00QPRC=MQMAS400.PROCESS
PROCESSPRC=MQMAS400.PROCESSAPPID=LIBR/PROGRAM
QMGR=MQFER400 QMGR=MQMAS400
1
2 - Alternativa
*PGM=LIBR/PROGRAM
Parm: DS MQMT Riceve nome della codaE provvede a scodare MQGET
3