300 likes | 404 Views
Seminar Großrechneraspekte. Messaging Systeme MQSeries Doreen Baum. Überblick. MQSeries-Architektur Kommunikation zwischen Queue-Managern Aktivieren von Applikationen Kommunikation zwischen Client und Server MQI (Message-Queuing-Interface) Code Fragment Zusammenfassung.
E N D
Seminar Großrechneraspekte Messaging Systeme MQSeries Doreen Baum
Überblick • MQSeries-Architektur • Kommunikation zwischen Queue-Managern • Aktivieren von Applikationen • Kommunikation zwischen Client und Server • MQI (Message-Queuing-Interface) • Code Fragment • Zusammenfassung
Bestandteile des Queuing-Systems • Queue-Manager (MQM) • Listener • Trigger-Monitor • Channel-Initiator • Message-Channel-Agent (MCA oder Mover)
Möglichkeiten der Aktivierung Queue-Manager startet das Channel-Programm: • Sobald die erste Nachricht auf die Xmit-Queue gelegt wird • Jedesmal, wenn eine Nachricht auf die Xmit-Queue gelegt wird • Erst wenn die Queue eine bestimmte Anzahl von Nachrichten enthält
Aktivierungstypen Eine Trigger-Message wird in die Initiation-Queue geschrieben, wenn: • every: es wird eine Nachricht in den Ziel-Queue geschrieben • first: sobald die Ziel-Queue leer wird • n messages: es befinden sich n Nachrichten in der Ziel-Queue
Arten von Clients • Fat-Client • Verfügen über lokalen Queue-Manager • Slim-Client oder MQSeries-Client • Haben keinen lokalen Queue-Manager • Nur arbeitsfähig, wenn Client mit einem Server verbunden ist
Rechner-Type • MQSeries-Client Slim-Client • MQSeries-Server Zwischen-Knoten • Leaf-Node Fat-Client
Kommunikations-Modi • synchron: • Applikation wartet auf eintreffende Nachrichten • Verarbeitung fortsetzen nach Eintreffen • asynchron • Verarbeitung beginnt, wenn Applikation gestartet wird und eine Nachricht vorhanden ist
API-Calls • MQCONN: Verbindung mit Queue-Manager herstellen • MQCONNX: Verbindung mit Queue-Manager über eine schnelle Verbindung herstellen • MQBEGIN: startet eine Arbeitseinheit, die von einem Queue-Manager koordiniert wird
API-Calls • MQOPEN: öffnet eine Queue • MQPUT: legt eine Nachricht auf eine Queue • MQCLOSE: schließt eine Queue • MQPUT1: Kombination von MQOPEN, MQPUT und MQCLOSE • MQINQ: fordert Informationen über den Queue-Manager oder eines seiner Objekte an
API-Calls • MQSET: verändert einige Attribute eines Objektes • MQCMIT: abgelegte Nachrichten werden verfügbar gemacht und zurück gekommenen Nachrichten werden gelöscht • MQBACK: abgelegte Nachrichten werden gelöscht und zurück gekommene Nachrichten werden wieder auf Queue gelegt
API-Calls • MQDISC: trennt die Verbindung zum Queue-Manager
Code Fragment MQCONN HCON; // Connection handle MQHOBJ Hobj1; // Object handle for queue 1 MQHOBJ Hobj2; // Object handle for queue 2 MQLONG CompCode, Reason; // Return Codes MQOD od1 = {MQOD_DEFAULT}; // Object Descriptor queue 1 MQOD od2 = {MQOD_DEFAULT}; // Object Descriptor queue 2 MQMD md = {MQMD_DEFAULT}; // Message Descriptor MQPMO pmo = {MQPMO_DEFAULT}; // Put message options MQGMO gmo = {MQGMO_DEFAULT}; // Get message options // Verbindung zu Queue-Manager herstellen strcpy (QMName, "MYQMGR"); MQCONN (QMName, &Hcon, &CompCode, &Reason);
Code Fragment // Queue für die Ausgabe öffnen strcpy (od1.ObjectName, "QUEUE1"); MQOPEN (Hcon, &od1, MQOO_OUTPUT, &Hobj1, &CompCode, &Reason); // Nachricht auf den Queue legen MQPUT (Hcon, Hobj1, &md, &pmo, 100, &buffer, &CompCode, &Reason); // Queue für die Ausgabe schließen MQCLOSE (Hcon, &Hobj1, MQCO_NONE, &CompCode, &Reason);
Code Fragment // Queue für die Eingabe öffnen options = MQCO_INPUT_AS_Q_DEF; strcpy (od2.ObjectName, "QUEUE2"); MQOPEN (Hcon, &od2, options, &Hobj2, &CompCode, &Reason); // Get Message gmo.Options = MQGMO_NO_WAIT; buflen = sizeof (buffer-1); memcpy (md.MSGId MQMI_NONE, sizeof (md.MsgId); memset (md.CorrelId, 0x00, sizeof (MQBYTE24)); MQGET (Hcon, &Hobj2, &md, &gmo, buflen, buffer, 100, MQOPEN, &CompCode, &Reason);
Code Fragment // Queue für die Eingabe schließen options = 0; MQCLOSE (Hcon, &Hobj2, options, &CompCode, &Reason); // Verbindung zum Queue-Manager trennen MQDISC (Hcon, &CompCode, &Reason);
Zusammenfassung • MQSeries-Applikationen können mit minimalem Aufwand entwickelt und getestet werden • Auf vielen Plattformen lauffähig, deshalb gute Kommunikation über Netzwerk mit unterschiedlichen Komponenten • Konsistentes API auf allen Plattformen
Literatur • Einführung in z/OS und OS/390 P.Herrmann/U.Kebschull/W.G.Spruth