# Message Oriented Middleware

Nachrichtenorientierte Middleware bzw. Message Oriented Middleware (MOM) bezeichnet Middleware, die auf der asynchronen oder synchronen Kommunikation, also der Übertragung von Nachrichten (englisch messages) beruht. Das Format für die Nachrichten ist nicht festgelegt, in der Praxis hat sich jedoch XML als beliebtes Format etabliert.
MOM unterstützt drei verschiedene Kommunikationsprotokolle
* Message Passing (Direkte Kommunikation zwischen Anwendungen)
* Message Queueing (Indirekte Kommunikation über eine Warteschlange)
* Publish & Subscribe (Herausgeber stellt dem Abonnenten Nachrichten zur Verfügung)

## Vorteile

* Asynchrone/synchrone Kommunikation
* Server/Dienst muss nicht sofort verfügbar sein
* Message-Warteschlangen
* Meist schnellere Ausführung als Funktionsaufruf-basierte Programme
* Lose Kopplung von Server/Clients
* Mehr Toleranz für Änderungen der bestehenden Funktionen
* Verbesserte Verfügbarkeit der Systeme
* Parallele Verarbeitung von Nachrichten möglich

## Nachteile

* Ausfall der MOM legt alle angeschlossenen Systeme lahm
* Designen, Testen, Debuggen und Entwicklung der Bauteile sind für Synchron-Programmierer ungewohnt

## Standards und Formate
### Message Oriented Middleware mit XML

    Der Einsatz von XML als Sprachbasis für die Nachrichten bei Message Oriented Middleware ist in der Praxis weit verbreitet. Aufgrund des vergleichsweise selbsterklärenden und im Gegensatz zu Nachrichten im Binärformat leicht menschenlesbaren Formats ist es beim Einsatz von XML relativ einfach, auch die Kommunikation zwischen Middleware-Systemen zu ermöglichen, wenn sie unterschiedliche Sprachen verwenden, solange die Sprachen XML-basiert sind. Um die Kommunikation zu ermöglichen, kann ein XSLT-Prozessor als Übersetzer zwischengeschaltet werden, der mit Hilfe eines Transformations-Stylesheets Nachrichten von der XML-basierten Sprache des Quellsystems in die Sprache des Zielsystems übersetzt. Als Protokoll wird häufig SOAP eingesetzt.

### XML

    Die Auszeichnungssprache XML ist heute in der Informationstechnik weit verbreitet und wird in zahlreichen Anwendungsgebieten eingesetzt. Sie ist keine konzeptionelle Voraussetzung für einen Enterprise Service Bus (ESB), wird aber in der Mehrheit der ESB-Produkte und der realisierten ESBs in Anwendungslandschaften vielfältig eingesetzt. Sie dient häufig als vereinheitlichtes Datenformat, in dem Nachrichten über den Message Bus im Kern eines ESB übermittelt werden, aber auch als Format für den Austausch von Nachrichten zwischen Diensten und dem Message Bus über die entsprechenden Endpunkte und Adapter. Weiter findet sie Verwendung in der Beschreibung von Schnittstellen, zum Beispiel mit der Schnittstellenspezifikationssprache WSDL.

### XPath und XQuery

    XPath und XQuery sind Abfragesprachen, mit denen Teile von XML-Dokumenten abgefragt und extrahiert werden können. Sie sind keine Voraussetzung für einen ESB, werden aber in ESBs häufig im Kontext der Routingdienste eingesetzt. Routingregeln, die auf Steuerdaten oder Inhalten von Nachrichten beruhen, sind oft als XPath- bzw. XQuery-Ausdrücke über diese Nachrichten formuliert.

### XSLT

    XSL Transformation (XSLT) ist eine Programmiersprache zur Transformation von XML-Dokumenten. XSLT ist keine technologische Voraussetzung für einen ESB. Die Sprache wird aber häufig in Transformationsdiensten verwendet, namentlich wenn ein ESB XML als vereinheitlichtes Datenformat nutzt.

### SIP

    Session Initiation Protocol (SIP) steuert durch asynchrone Nachrichten den Verbindungsaufbau und Verbindungsabbau von Voice-over-IP Sprachkommunikation. SIP wird bei 3rd Generation Partnership Project (3GPP) als Protokoll für Multimediaunterstützung im 3G-Mobilfunk (UMTS) benutzt. In der Telekommunikationstechnik ist SIP Teil der control plane. Sprach- oder Multimedia-Daten sind Teil der data plane.

### JMS

    Java Message Service (JMS) ist eine standardisierte Programmierschnittstelle, um aus Java-basierten Anwendungen Nachrichten über einen Message Bus versenden und empfangen zu können. Sie ist keine Voraussetzung für einen ESB. ESBs, die stark in der Java-Welt verankert sind, zum Beispiel, weil sie selbst in Java implementiert sind, bieten oft Standard-Adapter und Standard-Endpunkte an, damit Dienste den ESB über JMS nutzen können.
    JMS ist der am weitesten verbreitete Standard für MOMs und wird von fast allen Herstellern unterstützt.

### SOAP

    SOAP ist ein Netzwerkprotokoll, mit dessen Hilfe Daten zwischen Systemen ausgetauscht und Dienstschnittstellen von entfernten Diensten genutzt werden können. SOAP basiert auf weit verbreiteten Technologien, zum Beispiel HTTP und SMTP als Protokollen, XML als Datenformat oder WSDL als Sprache für die Schnittstellenspezifikation. Dienste, die ihre Schnittstellen mit Hilfe dieser Technologien zugänglich machen, nennt man Webdienste oder Webservices. Das Konzept des Enterprise Service Bus ist nicht auf Webservices oder die Technologie SOAP beschränkt. In der Praxis integriert ein ESB aber oft verteilte Dienste, indem es sie mit SOAP-Adaptern an den zentralen Message Bus anbindet.

### AMQP

    Advanced Message Queuing Protocol (AMQP) ist ein in Entwicklung befindliches Wirelevel-Protokoll, das von einem Konsortium von über 20 Mitgliedern (u. a. JP Morgan, Microsoft, Red Hat) entwickelt wird. Im Mai 2010 wurde der Draft (Entwurf) der Version 1 veröffentlicht. Um der großen Verbreitung von JMS Rechnung zu tragen, sind alle JMS Funktionen in dem Protokoll eingearbeitet. Dies ermöglicht es den Entwicklern, weiter die JMS Schnittstelle zu nutzen, während sich MOMs untereinander mit AMQP verständigen können.

### JBI

    Mit Java Business Integration (JBI) bezeichnet man einen Standard, der im Rahmen des Java Community Process (JCP) unter der Nummer JSR 208 veröffentlicht wurde. Das Dokument standardisiert einen Teil der Architektur eines Enterprise Service Bus für ein bestimmtes technisches Umfeld, nämlich Softwareentwicklung und IT-Architektur basierend auf der Java Platform, Enterprise Edition (Jakarta EE). Es detailliert namentlich die Architektur des Subsystems eines ESB, das Chappell als service container bezeichnet hat.

### Apache OpenWire

    Ein Wirelevel Protokoll, bisher nur von Apache ActiveMQ unterstützt.

### Apache Streaming Text Oriented Messaging Protocol (Stomp)

    Sehr einfaches Text-basiertes Protokoll. Native Unterstützung durch ActiveMQ (angekündigt für RedHat HornetQ) und xmlBlaster. Es wird jedoch ein Adapter für JMS Middleware angeboten, sodass STOMP Clients über eine JMS Middleware kommunizieren können. Dabei ist aber zu beachten, dass dieses (durch den mangelnden Funktionsumfang von STOMP) nur in eine Richtung (STOMP → JMS) funktioniert.

### Digistan RestMS (RESTful Messaging Service)

    RestMS arbeitet über reines HTTP/HTTPS und ist für Webanwendungen gedacht. Bisher existieren drei Implementierungen. Außerdem sind Umsetzungen für AMQP 0.9.1 implementiert.

## MOM-Produkte

Die folgenden Produkte sind eine willkürliche Auswahl von MOM-Produkten am Markt:
* Websphere MQ von IBM (früher MQSeries)
* Apache ActiveMQ als JMS-Broker wahlweise auch mit Apache Camel (beides von der Apache Software Foundation)
* RabbitMQ als AMQP-Broker
* SAP Process Integration der SAP
* Alle Jakarta EE-Anwendungsserver (durch JMS-Unterstützung)
* Microsoft Message Queue / Microsoft Message Queue Server