In Message Queue 4.2 kann ein Herausgeber nun Nachrichten an mehrere Themenziele veröffentlichen und ein Abonnent kann Nachrichten von mehreren Themenzielen konsumieren. Diese Fähigkeit wird erreicht, indem ein Themenzielname mit Platzhalterzeichen verwendet wird, der für mehrere Ziele steht. Durch die Verwendung dieser symbolischen Namen können die Administratoren bei Bedarf zusätzliche Themenziele erstellen, die dem Benennungsschema mit Platzhaltern entsprechen. Die hinzugefügten Ziele werden automatisch bei Veröffentlichungen durch Herausgeber und beim Konsum durch Abonnenten berücksichtigt. (Bei Abonnenten sind Themen mit Platzhalterzeichen üblicher als bei Herausgebern.)
Diese Funktion gilt nicht für Warteschlangenziele.
Das Format des symbolischen Themenzielnamens besteht aus mehreren Segmenten, bei denen Platzhalterzeichen (*, **, >) für ein oder mehrere Namenssegmente stehen können. Beispiel: Angenommen Sie verwenden folgendes Benennungsschema für Themenziele:
Größe verwendet wird.Farbe. Form
Dabei können die Themennamensegmente folgende Werte aufweisen:
Größe: large, medium, small, ...
Farbe: red, green, blue, ...
Form: circle, triangle, square, ...
Die Nachrichtenwarteschlange unterstützt folgende Platzhalterzeichen:
* steht für ein einzelnes Segment
** steht für ein oder mehrere Segmente
> Steht für eine beliebige Anzahl aufeinander folgender Segmente
Sie können daher mehrere Themenziele wie folgt angeben:
large.*.circle steht für:
large.red.circle large.green.circle ...
**.square steht für alle Namen, die auf .square enden, z. B.:
small.green.square medium.blue.square ... |
small.> steht für alle Zielnamen, die mit small. beginnen, z. B.:
small.blue.circle small.red.square ... |
Um diese Funktion für mehrere Ziele zu verwenden, erstellen Sie Themenziele mit einem ähnlichen Benennungsschema wie oben beschrieben. Die Client-Anwendungen können dann Herausgeber oder Konsumenten mithilfe von symbolischen Zielnamen erstellen. Beispiel:
... String DEST_LOOKUP_NAME = "large.*.circle"; Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME); TopicPublisher myPublisher = mySession.createPublisher(t) myPublisher.send(myMessage);
... String DEST_LOOKUP_NAME = "**.square"; Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME); TopicSubscriber mySubscriber = mySession.createSubscriber(t); Message m = mySubscriber.receive();
Im ersten Beispiel legt der Broker eine Kopie der Nachricht an einem Ziel ab, das dem symbolischen Namen large.*.circle entspricht. Im zweiten Beispiel wird ein Abonnement erstellt, wenn es mindestens ein Ziel gibt, das mit dem symbolischen Namen **.square übereinstimmt, und der Abonnement erhält Nachrichten aus allen Zielen, die mit diesem symbolischen Namen übereinstimmen. Wenn es keine Ziele gibt, die mit dem symbolischen Namen übereinstimmen, wird der Abonnent erst erstell, wenn ein solches Ziel vorhanden ist.
Wenn ein Administrator zusätzliche Ziele erstellt, die mit einem symbolischen Namen übereinstimmen, veröffentlichen die Platzhalter-Herausgeber, die mit diesem symbolischen Namen erstellt wurden, anschließend unter diesem Ziel, und die Platzhalter-Abonnenten, die mit diesem symbolischen Namen erstellt wurden, empfangen anschließend Nachrichten von diesem Ziel.
Außerdem melden die Message Queue-Verwaltungswerkzeuge, neben der Gesamtzahl an Herausgebern (Produzenten) und Abonnenten (Konsumenten) für ein Themenziel auch die Anzahl der Herausgeber, bei denen es sich um Platzhalter-Herausgeber handelt (einschließlich der zugehörigen symbolischen Zielnamen) und die Anzahl der Abonnenten, bei denen es sich um Platzhalter-Abonnenten handelt (einschließlich der symbolischen Zielnamen), sofern vorhanden.