Message-Queues

Message-Queues sind Threads mit einer Queue für Messages. Wenn eine Message für ein Target beim Namespace ankommt, wird die Message-Queue festgestellt, dem das Target zugeordnet wurde. Anschließend wird die Message dieser Queue übergeben, wo sie in einer Queue (First In, First Out) temporär gespeichert wurde. Nacheinander werden dann die Messages in der Queue entnommen und den Targets zur Bearbeitung übergeben.

Die MessageQueue hat eine ID vom Typ IId. Sie wird beim Anlegen und registrieren der Queue vom System vergeben. Der Getter dafür lautet:

IId getId();

Die ID wird benötigt beim Registrieren von Targets. Gibt man dort keine Queue-ID an, so wird das Target immer in der ersten Queue des Namespaces angemeldet. Die Message-Queue-ID wird hier oft als QID erwähnt.

Die Queue hat noch mehr Methoden:

// Gibt eine Beschreibung zurück.
String getDescription();

// Gibt die Anzahl der gerade enthaltenden Messages zurück.
int getSize();

// Interne Methode zum übergeben der Messages
void offer(CMessage aMsg);

Den zugrunde liegenden Thread erhält man über:

Thread getThread();

Die restlichen Methoden sind eher interner Natur.

MessageQueueRegistry

Jeder Namespace hat eine Message-Queue-Registry. In der Regel kommt der Programmierer damit gar nicht in Kontakt, da die meisten Namespaces nur eine MessageQueue und damit einen Thread besitzen. Mittels dieser Registry kann man Message-Queues anlegen und registrieren.

Die Namespace-ID des Namespaces, dem die Registry zugeordnet ist, bekommt man so:

IId getNamespaceId();

Das Anlegen erfolgt hier:

IMessageQueue createAndStartAsyncQueue(String aDesc,
                                       int aThreadPriority) throws CException;

Eine bestehende Queue kann man auch wieder loswerden:

void deleteQueue(IId aQID) throws CException;

Da die meisten Namespaces nur eine Queue haben, gibt es der Bequemlichkeit halber diese Methode:

IMessageQueue getFirstQueue();

Weitere Methoden zum Zugriff auf die angemeldeten Queues:

// Holt eine bestimmte MessageQueue. IMessageQueue getQueue(IId aQID);

// Mit Exception bei unbekannten QID IMessageQueue getQueueEx(IId aQID) throws CException;

// Das Array aller angemeldeten Queues für den Namespace IId[] getQueueIdArray();

Informationen über Queues erhält man über:

void getQueueInfo(IId aQID,
                  CRecord aRecord) throws CException;

Der Typ des Records ist CRecordGetQueueInfo.

Für die Verwaltung von Listenern sind folgende Methoden da:

IId[] registerQueueListener(ITargetAddress aListener);

void deregisterQueueListener(ITargetAddress aListener);

Die erste Methode gibt auch gleich die Liste alle angemeldeten MessageQueues zurück. Listener bekommen folgende Notifikationen:

  • CRecordNotifyQueueRegistered
  • CRecordNotifyQueueDeregistered