
| Advanced Queuing (AQ) AQ ist ein Messaging-Mechanismus in einer Datenbank. |
| Enqueue Einstellen von Nachrichten in eine Queue. |
| Dequeue Entnahme einer Nachricht aus einer Queue. |
Advanced Queuing (AQ) ist ein Messaging-System in Oracle Datenbanken. Es ermöglicht den Datenaustausch zwischen verschiedenen Applikationen. Die Vorteile der Datenbankunterstützung zeichnen sich durch Hochverfügbarkeit, Sicherheit, Flexibilität und der Möglichkeit zur Datenrettung aus.
| ||
| ||
| ||
| ||
| ||
| ||
|
Nachrichten werden in einer so genannten Warteschlange (= Queue) abgelegt. Die Datenbasis dieser Warteschlange ist eine Tabelle, in der jede Zeile eine Nachricht repräsentiert.
Queue-Tabellen können mit verschiedenen Datentypen und somit Dateninhalten angelegt und dadurch an den Nachrichtenaustausch von Applikationen angepasst werden.
Zu jeder Queue-Tabelle wird automatisch eine Exception Queue angelegt. Treten bei Weiterleitungen von Nachrichten Probleme auf oder ist die benutzerdefinierte Gültigkeitsdauer der Nachrichten überschritten, werden diese in die Exception Queue verschoben.
Es gibt zwei Arten von Queues:
Um Advanced Queuing in der Datenbank zu nutzen, muss mindestens ein Queue-Monitor-Prozess aktiv sein. Dieser Queue-Monitor-Prozess prüft beispielsweise nach, ob Nachrichten bereits an alle Empfänger gesendet worden sind und ob und wie lange diese nach vollständiger Bearbeitung aus der Queue entfernt werden (= rentention time).
Hierzu sollte der Initialisierungsparameter AQ_TM_PROCESSES auf einen Wert > 0 eingestellt werden (bis Oracle 10g). Bei einem Wert von beispielsweise 10, werden mindestens ein und maximal zehn Prozesse gestartet. Die Anzahl der aktiven Prozesse richtet sich nach dem Arbeitsaufkommen zum Abarbeiten der Queues.
Die Änderung des Parameters kann auch im laufenden Betrieb vorgenommen werden (siehe Abbildung 1).
Die Implementierung von Advanced Queuing setzt bestimmte Berechtigungen voraus. In der Regel wird ein AQ-Administrator mit den benötigten Rechten angelegt. Dieser Administrator dient gleichzeitig als Eigentümer aller erstellten AQ-Objekte. Weiterhin können AQ-Nutzer angelegt oder bestehende mit den benötigten Rechten ausgestattet werden.
Um das Vergeben der Rechte an andere AQ-Nutzer zu erleichtern, ist es sinnvoll, eigene Rollen für die Nutzung bzw. Verwaltung der AQ-Architektur anzulegen. Oracle bietet bereits zwei vorgefertigte Rollen zum Advanced Queuing an:
Um Nachrichten über Advanced Queuing austauschen zu können, sind folgende Schritte notwendig:
Eine Queue-Tabelle wird mit Hilfe des Packages DBMS_AQADM angelegt. Standardmäßig sind alle Queues Singleconsumer, sprich: genau ein Empfänger kann eine Nachricht verarbeiten. Der Empfänger braucht sich hierbei nicht auszuweisen.
Über den Parameter MULTIPLE_CONSUMERS der Prozedur CREATE_QUEUE_TABLE kann eine Multiconsumer Queue angelegt werden.
Hier können die Empfänger implizit als so genannte Teilnehmer (= Subscriber) ausgewiesen, oder explizit beim dem Versenden einer Nachricht als Empfänger (= Recipient) angegeben werden. In diesem Fall können einige Subscriber die Nachricht nicht erhalten.
Jede Nachricht trägt Nutzdaten (= Payload) mit sich. Diese Nutzdaten können sowohl Basisdatentypen wie NUMBER und VARCHAR2 als auch Objekttypen sein. In Abbildung 2 wird für die Nutzlast ein Objekttyp verwendet.
Mit Hilfe dieses Objekttyps wird eine Queue-Tabelle erstellt. Hierzu wird die Prozedur CREATE_QUEUE_TABLE aus dem Package DBMS_AQADM mit den nötigen Parametern aufgerufen. Der Parameter QUEUE_TABLE gibt den Namen der zu erstellenden Queue-Tabelle an. QUEUE_PAYLOAD_TYPE erwartet die Angabe eines Typs für die Nutzdaten, in dem Fall MY_AQ_TYPE (siehe Abbildung 3).
Wurde die Queue-Tabelle erstellt, kann nun eine Queue erzeugt werden. Der Prozedur CREATE_QUEUE werden die Parameter QUEUE_NAME und QUEUE_TABLE übergeben (siehe Abbildung 4).
Um die Queue nutzen zu können, wird sie mit Hilfe der Prozedur START_QUEUE in Betrieb genommen. Hier reicht die Angabe der zu startenden Queue im Parameter QUEUE_NAME (siehe Abbildung 5).
Sind alle Schritte erfolgreich verlaufen, kann die Queue nun genutzt werden. Das Beispiel in Abbildung 6 zeigt eine einfache Verwendung von Nachrichten Einreihung (= Enqueue) und die Entnahme von Nachrichten (= Dequeue). Für Enqueue und Dequeue wird kein implizites COMMIT gesetzt. Dies muss explizit in der Programmierung beachtet werden.
Eine einfache Selektion (siehe Abbildung 7) auf den Data-Dictionary View ALL_OBJECTS, gibt einen Überblick der erstellten Datenbankobjekte.
Oracle Advanced Queuing ist ein mächtiges Werkzeug für den Umgang mit Queues. Bei komplexen Projekten oder sei es allein nur für die Kommunikation zwischen zwei Applikationen, gewinnt Advanced Queuing immer mehr an Bedeutung.
Hier kann die gesamte Bandbreite der Funktionalität von Advanced Queuing in Betracht gezogen werden. Die von Oracle zur Verfügung gestellte Java-Bibliothek zum Advanced Queuing gibt zusätzliche Freiheit zur unabhängigen Applikationsentwicklung.
Karsten Fiedler (info@ordix.de).