Home Unternehmen             Portfolio             Trainingsshop    Kunden & Partner Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  4/2009  Pfeil  Java/JEE
suche: 
Der Artikel richtet sich an Software-Architekten und technische Projektleiter.

Glossar

Message
Nachricht, die zwischen Anwendungen ausgetauscht wird. Häufig werden Textnachrichten in Form von XML-Dokumenten eingesetzt.
Message-Broker
Ist eine Erweiterung eines Message-Servers. Er kann abhängig vom Inhalt der Nachricht dessen Ziel bestimmen.
Publisher
Client, der Nachrichten zu einem Topic einstellt.
Queue
Nachrichten-Warteschlage des Message Servers. Der Sender stellt Nachrichten ein, der Empfänger liest diese.
SSL
Secure Socket Layer. Protokoll zur Verschlüsselung von Netzwerkverbindungen.
Subscriber
Einhängen eines Dateisystems unterhalb eines bestimmten Pfades/Verzeichnisses (Mountpoint).Client, der Nachrichten zu einem Topic liest.
Topic
Ist eine spezialisierte Nachrichten-Warteschlange.



Java verbindet – ActiveMQ


Um Anwendungen voneinander unabhängig zu machen, ist der Austausch von Nachrichten über Message Queues zu empfehlen. Diese Art der Kommunikation ist sehr tolerant gegenüber unterschiedlichen Programmiersprachen oder Betriebssystemen. Es ist auch kein Beinbruch, wenn sich eine beteiligte Anwendung mal eine Auszeit (Downtime) nimmt. ActiveMQ ist ein Message Broker aus dem Hause Apache Software Foundation. In Java implementiert, bietet er Bibliotheken, die zur Interoperabilität einladen.

$ .\activemq.bat
ACTIVEMQ_HOME: g:\software\apache-activemq-5.2.0\bin\..
ACTIVEMQ_BASE: g:\software\apache-activemq-5.2.0\bin\..
Loading message broker from: xbean:activemq.xml
INFO DefaultCamelContext 
	- JMX enabled. Using InstrumentationLifecycleStrategy.
…
INFO TransportServerThreadSupport 		
	- Listening for connections at: tcp://tiguan:61616
INFO TransportConnector 				
	- Connector openwire Started
INFO TransportServerThreadSupport 		
	- Listening for connections at: ssl://tiguan:61617
INFO TransportConnector 				
	- Connector ssl Started
INFO TransportServerThreadSupport 		
	- Listening for connections at: stomp://tiguan:61613
INFO TransportConnector 				
	- Connector stomp Started
INFO TransportServerThreadSupport 		
	- Listening for connections at: xmpp://tiguan:61222
INFO TransportConnector					
	- Connector xmpp Started
INFO NetworkConnector 					
	- Network Connector default-nc Started
INFO BrokerService 						
	- ActiveMQ JMS Message Broker (localhost,
ID:tiguan-1078-1254059333437-0:0) started
…
INFO WebConsoleStarter 					
	- ActiveMQ WebConsole initialized.
INFO /admin 								
	- Initializing Spring FrameworkServlet 'dispatcher'
INFO log 									
	- ActiveMQ Console at http://0.0.0.0:8161/admin
INFO log 									
	- ActiveMQ Web Demos at http://0.0.0.0:8161/demo
Abb. 1: Ausgabe auf der Console beim Start von ActiveMQ.
 
Abb. 2: Hauptmenü der webbasierten Administrationsoberfläche.
Abb. 2: Hauptmenü der webbasierten Administrationsoberfläche. Vergrößern
 
Abb. 3: Dialog zum Erstellen einer Nachricht.
Abb. 3: Dialog zum Erstellen einer Nachricht. Vergrößern
 
<destinations>
		<queue physicalName="configured.queue" />
</destinations>
<plugins> <simpleAuthenticationPlugin> <users> <authenticationUser username="system" password="manager" groups="users,admins"/> <authenticationUser username="user" password="password" groups="users"/> </users> </simpleAuthenticationPlugin> <authorizationPlugin> <map> <authorizationMap> <authorizationEntries> <authorizationEntry queue=">" read="admins" write="admins" admin="none" /> <authorizationEntry queue="configured.queue" read="users,admins" write="users,admins" admin="none" /> <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/> </authorizationEntries> </authorizationMap> </map> </authorizationPlugin> </plugins>
Abb. 4: Ausschnitt aus der Konfigurationsdatei activemq.xml zur Definition der Queue configured.queue.
 

Queue: Point-to-Point-Kommunikation

Eine Message Queue wird oftmals für eine Point-to-Point-Kommunikation genutzt: Die Sender stellen Textnachrichten, oft als XML-Dokument, in die Nachrichten-Warteschlange. Der Empfänger holt diese Nachricht ab, verarbeitet sie und löscht sie aus der Warteschlange.

Für die Steuerung der Kommunikation können die folgenden Eigenschaften genutzt werden:

  • Name der Queue: Ein Message-Service kann verschiedene Warteschlangen unterstützen. Sender und Empfänger müssen sich auf den Namen der Warteschlange einigen.
  • Properties (Meta-Informationen): Einer Nachricht können beschreibende Informationen mitgegeben werden. Beispiel: Typ=“Bestellung“. Anhand dieser Informationen kann der Empfänger die Nachrichten abholen, die er verarbeiten kann.
  • Correlation-ID: Diese Meta-Information ist bei einer beidseitigen Kommunikation nützlich. Partner A versendet eine Bestellung mit einer eindeutigen Correlation-ID. Der Empfänger B führt die Bestellung aus und bestätigt die Bestellung durch eine Nachricht für Partner A mit derselben Correlation-ID.
  • Reply-To: Gibt den Namen der Queue an, an die eine Antwort zu schicken ist.
  • Priority: Bedeutung der Nachricht. Je höher die Zahl ist, desto eher wird diese Nachricht ausgeliefert.

 

Topic: Publish-Subscribe-Kommunikation

Die Publish-Subscribe-Kommunikation funktioniert wie ein schwarzes Brett. Viele Sender können zu einem Thema (Topic) Nachrichten einstellen (publish). Genauso kann es viele Interessenten (Subscriber) geben, die an diesen Nachrichten interessiert sind.

Die Nachrichten können genauso wie bei der Point-to-Point-Kommunikation mit Properties versehen werden, um ein filtern der Nachrichten zu ermöglichen.

In der Regel wird beim Erstellen der Nachricht eine Lebensdauer angegeben, um zu definieren, wie lange sie verfügbar ist. So wird der Nachrichtenbestand in der Queue reguliert.

Download – Install and Play

ActiveMQ kann kostenfrei heruntergeladen werden [1]. Für die getestete Version 5.2.0 ist eine Java-Version 1.5 oder höher erforderlich.

Nach dem Entpacken des Zip-Files wechseln Sie in das bin-Verzeichnis von ActiveMQ. Danach starten Sie unter MS-Windows activemq.bat. In der Unix/Linux-Distribution von ActiveMQ gibt es entsprechende Shell-Skripte.

Schon ist der Message Broker gestartet. In der Standardinstallation kann unmittelbar mit der Entwicklung angefangen werden – eine weitere Konfiguration ist nicht erforderlich. Die Zugangsparameter sind der Konsolenausgabe (siehe Abbildung 1) zu entnehmen:

Für den Zugriff auf die Message Queues stehen mehrere Protokolle zur Verfügung. Das Standard-Protokoll wird bei ActiveMQ openwire genannt.

Über dieses Protokoll korrespondieren Java-Anwendungen über JMS oder C/C++-Anwendungen mit Hilfe der von ActiveMQ mitgelieferten Bibliotheken. Über openwire können somit Java- und C/C++-Anwendungen einfach Textnachrichten austauschen.

In Abbildung 1 ist als URL tcp://tiguan:61616 angegeben. Damit verbindet sich der Client mit dem Message Server. Auch eine verschlüsselte openwire-Verbindung wird angeboten (ssl://tiguan:61617).

Der Vollständigkeit halber sei erwähnt, dass weitere Protokolle in der Standardkonfiguration zur Verfügung stehen. Dieses sind stomp, das unter anderem für Perl- und PHP-Clients nützlich ist, und xmpp, als erweiterbares Nachrichtenprotokoll, das beispielsweise für Instant Messaging oder Chat-Rooms verwendet wird.

Neben der Angabe der Protokolle für den Nachrichtenverkehr erscheint im Protokoll ActiveMQ Console at http://0.0.0.0:8161/admin. Diese URL kann direkt von einem Internetbrowser aufgerufen werden, um administrative Aufgaben zu erledigen.

Super, Administrator

Gleich vorweg – für die Java-Entwicklung kann ActiveMQ in der Standardkonfiguration betrieben werden: Die Webanwendung für die Administration dient in erster Linie zur Überprüfung der Konfiguration.

Die Administrationsoberfläche steht als Web-Anwendung über den Port 8161 unter /admin zur Verfügung. Wie in Abbildung 2 zu sehen, können hier sowohl Queues als auch Topics überwacht und eingerichtet werden. Ebenfalls können auch Vorgänge des Clients als Sender für eine Queue oder als Subscriber für ein Topic eingeleitet werden. Auf diese Weise ist der Weg einer Nachricht nachvollziehbar.

Queues oder Topics werden dynamisch erzeugt. Sie stehen in dem Moment zur Verfügung, wenn die erste Nachricht mit einem entsprechenden Ziel beim Message Broker eingeht.

So kann durch den Link Senden unmittelbar eine Nachricht für eine neue Queue erstellt werden, siehe Abbildung 3.

Eine Besonderheit stellen die Felder Message Group und Message Group Sequence Number dar. Über diese Eigenschaften sorgt ActiveMQ dafür, dass die Nachrichten mit derselben Message Group nur an einen Empfänger in der angegebenen Reihenfolge gehen.

Gesendete Nachrichten werden angezeigt, indem im Hauptmenü die zugehörige Queue oder das Topic ausgewählt wird (siehe Abbildung 2). Nachrichten-Kopf, -Properties und -Inhalt sind einsehbar. Nachrichten lassen sich menügesteuert löschen, kopieren oder verschieben.

ActiveMQ in Betrieb

Für die Entwicklung ist die Standard-Konfiguration bestens geeignet. Aber auch für den Betrieb kann ActiveMQ viele Wünsche erfüllen. Dazu muss die Konfigurationsdatei activemq.xml angepasst werden.

Ganz oben auf der Wunschliste wird sicher stehen, dass durch die Konfiguration festgelegt wird, welche Queues oder Topics vom Server bedient werden. Es soll verhindert werden, dass diese einfach durch den Client angelegt werden. Im Element destinations (siehe Abbildung 4) lassen sich alle Queues/Topics konfigurieren, die mit dem Start des Message-Servers zur Verfügung stehen sollen. Durch das simpleAuthentication-Plugin wird verhindert, dass jeder Benutzer weitere Queues oder Topics anlegt.

Der nächste Punkt der Wunschliste wird bestimmt das Thema Persistenz betreffen. In der Standardkonfiguration wird für die Sicherung von Nachrichten der dateibasierte AMQPersistence-Adapter eingesetzt. Für gängige Datenbanksysteme stehen Templates für die Konfiguration zur Verfügung.

Gängige Architekturen für den Aufbau von Netzwerken für Message Broker von einfachem Proxy bis hin zu Lösungen für Hochverfügbarkeit oder zum Load Balancing werden unterstützt. Regelbasiertes Zustellen von Nachrichten ist möglich.

Fazit

Mit ActiveMQ steht sowohl dem Entwickler als auch dem Systemarchitekten ein Produkt zur Verfügung, das professionellen Ansprüchen genügt. Insbesondere die einfache Handhabung, sowie die Auswahl an unterstützten Protokollen und ausgelieferten Bibliotheken sprechen für ActiveMQ.

Bei der Planung, Realisierung und Betrieb Ihrer nachrichtenbasierenden Anwendung unterstützen wir Sie gern.



Dr. Stefan Koch (info@ordix.de).