Message Queuing Systems
Transcrição
Message Queuing Systems
1 Message Queuing Systems Andreas Haller Institut für Telematik, Universität zu Lübeck Ratzeburger Allee 160, 23538 Lübeck, Germany Email: [email protected] Zusammenfassung—Message Queuing Systems ist der Überbegriff für Message Oriented Middleware (MOM) sowie für die dabei verwendeten Protokolle, wie das Advanced Message Queuing Protocol (AMQP). Die Systeme kommunizieren synchron wie asynchron über so genannte Broker. Ziel ist, einen Nachrichtenaustausch zu etablieren, welcher einen hohen Nachrichtendurchsatz aufweist, und der vor allem zuverlässig ist. Message Queuing Systems sind die Grundlage für alle bekannten Instant Messaging Systeme am Markt, finden aber auch in jedem Betriebssystem bei der Taskabarbeitung Anwendung. In dieser Arbeit wird zunächst der Begriff Message Queuing Systems motiviert und die verwendeten Protokolle werden vorgestellt. Im weiteren Verlauf werden verschiedene Middlewarelösungen vorgestellt. Darauf folgt eine kurze Einführung über Message Queuing Systems und der angebotenen Softwarelösungen. Danach wird auf RabbitMQ näher eingegangen. Die Arbeit schließt mit einer Zusammenfassung bei der auch die zukünftige Entwicklung beleuchtet wird. Index Terms—Message Queuing Systems (MQS), Message Oriented Middleware (MOM), Extensible Messaging and Presence Protocol (XMPP), Advanced Message Queuning Protocol (AMQP), Websphere MQ, Apache Active MQ, RabbitMQ, Message Queuing Services (MQS), Amazon Simple Queue Service (Amazon SQS), Microsoft Azure Services Platform I. E INLEITUNG Um das Thema Message Queuing Systems verstehen und einordnen zu können, muss man sich zunächst mit den Vorraussetzungen und der Entstehung dieser Systeme auseinandersetzen [1]. Message Queuing bezeichnet einen meist asynchronen Nachrichtenaustausch zwischen einem Sender und Empfänger. Ein Sender verschickt eine Nachricht, bei der sichergestellt ist, dass diese beim Empfänger ankommt und verarbeitet wird. Wann der Empfänger die Nachricht verarbeitet, kann der Sender nicht beeinflussen. Nur die tatsächliche Annahme und Verarbeitung ist sichergestellt. Message Queues oder Warteschlangen sind ein bereits etabliertes Verfahren der asynchronen Kommunikation. Vorallem innerhalb von Computersystemen oder innerhalb von Anwendungen wird dieses Prinzip schon seit Jahrzehnten eingesetzt. So sind das Betriebssystem Microsoft Windows, sowie Linux, ein EventDriven System. Jede Eingabe oder Bewegung durch die Maus löst eine Nachricht oder Event aus. Über diese Nachrichten steuert das Betriebssystem seine eigenen Aufgaben, oder stellt Informationen an Anwendungen bereit. Die meisten Verfahren die hierbei verwendet werden, sind jedoch Closed Source und nicht ohne weiteres interoperabel [2], [3], [4], [5], [6]. Mit dem verstärkten Einsatz von verteilten Systemen wurde das Prinzip auch auf diese Problemdomäne übertragen. Nachrichten wurden jetzt über Rechnergrenzen hinweg verschickt. Die Anforderungen blieben gleich. Die Gefahr, dass Nachrichten über Rechnergrenzen hinweg verloren gehen, ist aber ungleich höher als innerhalb einer Anwendung oder eines Computersystems. Es entstand die Message Oriented Middleware (MOM) [7], [8]. Sie stellt nun die Basis für eine asynchrone Kommunikation zwischen Client und Server in einer verteilten Anwendung dar. Diese Form der Kommunikation steht im Gegensatz dazu, wenn Client und Server direkt und zeitgleich - also synchron - miteinander in Verbindung stehen und sich damit ebenso blockieren können. MOM wird daher auch als eine lose Kopplung zwischen den Teilnehmern bezeichnet [9]. Eine neuere Entwicklung sind die Message Queuing Services [10], welche die Leistungen der Message Oriented Middleware in die Cloud verschieben und somit Teil eines Software as a Service (SaaS) Netzwerkes sein können. Somit können die MOM-Funktionalitäten komfortabel über das Internet von nahezu jeder Plattform aus genutzt werden und ebenso komfortabel abgerechnet werden. Die weitere Arbeit ist wie folgt gegliedert: im nächsten Kapitel werden die gängigen Protokolle und deren Entstehung beschrieben. Kapitel 3 gibt einen Überblick über drei am Markt verfügbaren Message oriented Middleware Systeme und geht dabei im besonderen auf RabbitMQ ein. Kapitel 4 schließt mit der Beschreibung der Message Queuing Services. Das letzte Kapitel fasst die Erkenntnisse zusammen und gibt einen Ausblick über zukünftige Entwicklungen. II. P ROTOKOLLE A. Extensible Messaging and Presence Protocol (XMPP) Das Extensible Messaging and Presence Protocol (XMPP; www.xmpp.org) wurde zunächst unter dem Namen Jabber (www.jabber.org) bekannt. Es ist ein auf XML basierendes Protokoll, das von der Jabber open-source Gruppe 1999 zum Nachrichtenaustausch in Echtzeit ins Leben gerufen wurde [11]. Das Instant Messaging System Jabber war die erste Anwendung, die das Protokoll eingesetzt hat. In weiteren Iterationen des Protokolls wurde es von Google für Google Talk, von AOL für dessen Messenger und von Facebook für dessen Chat verwendet. Seit 2008 gehört Jabber zur Cisco Firmengruppe. Die Stärke von XMPP liegt in seiner Verbreitung. Da jedermann nicht nur Nutzer, auch einen eigenen XMPP Server betreiben können, gibt es keinen 2 zentralen Server und somit keinen Single Point of Failure. Die Sicherheit wird durch Isolation von einzelnen Netzen (isolierter Intranetserver) und durch eine hohe Verschlüsselung via Simple Authentication and Security Layer (SASL) und Transport Layer Security (TLS) gewährleistet. Auf das Protokoll aufbauend kann nahezu jede Funktionalität aufgesetzt werden. Die größte Schwäche von XMPP ist die Datenübertragung mittels XML. Hier gibt es deutlich bessere Ansätze wie das Advanced Message Queuing Protocol, das auf binären Datenversand setzt. Ein weiterer Nachteil ist die Client-Server-Kommunikation. Es findet keine direkte Kommunikation zwischen den einzelnen Nodes statt. Ein ursprüngliches Ziel von Jabber war es, die zu dieser Zeit auf dem Markt befindlichen Instant Messaging Systeme zusammenzuführen und sich somit mit nur einem Client, mit mehreren Systemen zu verbinden, welche nicht das XMPP Protkoll einsetzen. Dies hatte weniger mit dem Protokoll, sondern mehr mit der Serveranwendung zu tun, die solche Services bereitstellte. Das XMPP-Protokoll verwendet zur Kommunikation Streams. Der Grundlegende Aufbau dieser Streams ist, wie auch in Abbildung 1 zu sehen, in die drei Teile <presence\>,<message\>und <iq\>aufgeteilt. Die Verbindung wird über SASL und TLS verschlüsselt und per Simple Authentication gesichert [12]. B. Advanced Message Queuing Protocol Das Advanced Message Queuing Protocol, kurz AMQP, wurde im Juni 2006 von einer Gruppe von Unternehmen (JPMorgan Chase, Cisco Systems, Envoy Technologies, iMatix Corporation, IONA Technologies, Red Hat, TWIST Process Innovations, 29WEST) ins Leben gerufen. Der Zusammenschluss hatte das Ziel, einen offenen Standard für ein interoperables, asynchrones Nachrichtenprotokoll zu etablieren. Bereits bei Gründung war die erste Spezifiaktion des Protokolls fertig. Aus diesem Zusammenschluss ging später das OASIS Technical Commitee hervor, das AMQP weiter standardisieren sollte und später Ende 2012 die Version 1.0 veröffentlichte. Eine Besonderheit dieses Protkolls liegt auch in der aktiven, kontinuierlichen Weiterentwicklung und darin, dass während dieser bereits Implementationen in den verschiedensten Programmiersprachen (Java, C++, Python) erschienen sind. Da dieses Protokoll aus dem Finanz und Börsensektor entstanden ist, bestanden auch hohe Anforderungen an Geschwindigkeit, Durchsatz, Skalierbarkeit und Verlässlichkeit. AMQP verfolgt keinen monolithischen Ansatz, sondern besteht aus zwei Teilen. Das Netzwerkprotokoll, welches den Inhalt spezifiziert, den Client- oder Serveranwendungen schicken müssen, um miteinander zu kommunizieren und dem Protokollmodell, welches die Standards an AMQP Anwendungen setzt, damit diese untereinander interagieren können. Der Nachrichtenaustausch wird in “exchanges“ und “message queues“ unterteilt: • “exchange“ ist der Verteiler, der anhand von Kriterien Abbildung 1. Vereinfachte Sicht auf Zwei Streams (Quelle: [13]) und Regeln die Nachrichten weiterleitet, sie aber nicht speichert • “message queues“ speichern die Nachrichten in einer Warteschlange; Dauer und Speicherort werden von der Implementation festgelegt Eine weitere Besonderheit ist die Verschiebung der Routinglogik in die Broker. Dies führt zwar dazu, dass bei der Implementation von AMQP, im Gegensatz zu anderen Protokollen, deutlich mehr programmiert werden muss, jedoch ist der Gewinn an Geschwindigkeit und der Vorteil, den Datenfluss modifizieren zu können ungleich größer. Das Netzwerkprotokoll sorgt nun dafür, dass die Interoperabilität gegeben ist. AMQP ist ein binäres Protokoll, da binäre Protokolle mehr Daten in einen Frame übertragen können und der Dataoutput beim Nachrichtenaustausch ein sehr wichtiger Faktor ist. Auch das binäre Protokoll sorgt für einen erhöhten Programmieraufwand, aber auch wieder für eine deutlich höhere Geschwindigkeit. Abbildung 2 zeigt den Aufbau eines AMQP Frames [14]. Es gibt neun verschiedene Frame-Bodies: • open: neue Verbindung herstellen • begin: neue Session erstellen • attach: neuen Link erstellen • transfer: Nachricht verschicken • flow: Nachrichtenaustauschkontrollschema • disposition: Zuverlässigkeitseinstellungen (at-most-once, 3 • • • at-least-once, exactly-once) detach: Link trennen end: Session beenden close: Verbindung schliessen Abbildung 2. Aufbau des AMQP Frames (Quelle: [15]) III. M ESSAGE O RIENTED M IDDLEWARE Message Oriented Middleware (MOM) bezeichnet die Implementierung der diversen Protokolle in Form von Middleware. Abbildung 3 zeigt die Architektur von MOM. Abbildung 3. Architektur von MOM (Quelle: [9]) Die Protokolle werden zur synchronen Kommunikation genutzt, aber vor allem der asynchrone Ansatz findet Verwendung. Die Kommunikation wird in drei verschiedene Kommunikationsarten unterschieden: • • • Publish & Subscribe Message Passing Message Queuing Alle Ansätze vereinen, dass die Ausführungsgeschwindigkeit der Programme gesteigert werden, sowie die Verfügbarkeit der Programme zunehmen kann. Die größte Stärke ist auch gleichzeitig die größte Schwäche der MOM. Wie in Abbildung 3 zu sehen, liegt die Middleware, wie der Name bereits vermuten lässt, zwischen den anderen Schichten und sorgt bei Absturz etc. für den Ausfall des Gesamtsystems und aller zu diesem Zeitpunkt verbundenen Systeme. Im folgenden werden nun drei ausgewählte MOM-Systeme vorgestellt. A. Websphere MQ Websphere MQ von IBM, ist die wohl etablierteste kommerzielle MOM-Plattform. Sie ist mittlerweile über mehr als 10 Jahre gewachsen und für alle großen Plattformen (Windows, Linux, IBM z/OS) verfügbar. Websphere MQ ist integraler Bestandteil der Service-Oriented Architecture Plattform (SOA) von IBM. Das “MQ“ bezeichnet eine Aufteilung von den eigentlichen Messages, die wie bei AMQP binäre Daten sind, und den Message Queues welche die Nachrichten in den Programmen speichern. Die Queue Managers stellen dabei folgende Funktionalitäten bereit: • Request & Reply • Send & Forget • Publish & Subscribe Die Websphere MQ Explorer sind grafische Interfaces, mit welchen die Queue Managers konfiguriert und gesteuert werden können. Bereits bestehende Anwendungen, welche nicht das closed Source Protokoll von IBM sprechen können, werden über Proxies angebunden. Dazu bietet IBM Schnittstellen zu folgenden APIs an: • IBM Message QueueInterface (MQI) • Java Message Service (JMS) • WSDL • SOAP Wie bereits erwähnt sind die Queue Managers verantwortlich für die Steuerung und den zeitlichen Abflauf der Kommunikation. Die Kommunikation ist über einzelne unidirektionale Channels gelöst. Jeder Manager benötigt also mindestens zwei Kanäle, um Daten zu senden und zu empfangen. Die Manager können unterbrochene Verbindungen automatisch wieder herstellen. Der Nachrichtenversand wird mitgeloggt, jedoch werden nur Nachrichten die als ”persistent”gekennzeichnet sind, im Fall eines Ausfalls wieder hergestellt. Die “NonPersistent“ Nachrichten können dafür aber in einem “FastMode“ versendet werden, dessen Erfolg aber nicht garantiert werden kann. Die Abarbeitung der Nachrichten folgt dem FIFO-Prinzip. B. Apache ActiveMQ Apache ActiveMQ ist die Open Source Antwort auf Websphere MQ. Es gilt als die führende OpenSource Messaging Plattform. Da es auf Apache aufsetzt, ist es auch für ebenso viele Plattformen (u.a. Windows, Linux, Mac OSX) verfügbar. ActiveMQ ist ein Message Broker der die Java Standards JMS 1.1, J2EE 1.4, sowie JCA 1.5 unterstützt. Es wurde ursprünglich 2005 bei CodeHaus (www.codehaus.org) entwickelt und bereits 2006 von der Apache Software Foundation übernommen. Es ist heute das meist genutzte OpenSource Messaging-System der Welt [16], [17]. Ausser Java wird eine Reihe weiterer APIs unterstützt: • OpenWire (Java, C, C++, C) • Stomp (C, Ruby, Perl, Python, PHP, Flash) • REST • Ajax ActiveMQ unterstützt das AMQP-Protokoll und ist somit offen für eine Fülle von Clients. 4 C. RabbitMQ RabbitMQ (www.rabbitmq.com) ist eine Open Source Lösung, die das Advance Message Queuning Protocol (AMQP) einsetzt. Der RabbitMQ Server ist in der Sprache Erlang geschrieben [18]. Das Unternehmen Rabbit Technologies Ltd. wurde im April 2010 von VMWare übernommen. Die Software wird aber weiterhin als Open-Source Lösung vermarktet. RabbitMQ besteht aus folgenden Teilen: • RabbitMQ Server (nur Erlang) • Gateways für diverse Protokolle (HTTP, STOMP, MQTT) • offizielle AMQP Clients (Java, .NET, Erlang) • unterstütze AMQP Clients (Spring, Groovy, Scala, Akka, Play!, Ruby, Python...) Das Unternehmen wirbt damit, dass es eine Lösung für nahezu jeden Client (siehe Abbildung 4) bereit hält, was vor allem auf die Verwendung des AMQP-Protokolls zurückzuführen ist. Bash completion has been installed to: /usr/local/etc/bash_completion.d To have launchd start rabbitmq at login: ln -sfv /usr/local/opt/rabbitmq/*.plist ˜/ Library/LaunchAgents Then to load rabbitmq now: launchctl load ˜/Library/LaunchAgents/homebrew. mxcl.rabbitmq.plist Or, if you don’t want/need launchctl, you can just run: rabbitmq-server Warning: /usr/local/sbin is not in your PATH You can amend this by altering your ˜/.bashrc file Damit ist serverseitig alles installiert und konfiguriert, was zur Kommunikation benötigt wird. Der Server wird mittels launchctl load ˜/Library/LaunchAgents/homebrew.mxcl. rabbitmq.plist gestartet. 2) Java-Client: Um eine erste mögliche Kommunikation mit RabbitMQ zu zeigen muss zunächst das Java-Package von der Website geladen und entpackt werden. Dann werden zwei Java-Dateien (Send /Receive) erstellt. Ziel ist es zu zeigen, wie man eine Verbindung zum Server aufbaut und eine Nachricht verschickt sowie empfängt. Weiterführende Beispiele, sowie auch dieses, werden auf der Herstellerseite unter dem Punkt Tutorials angeboten. Abbildung 4. RabbitMQ für viele Clients (Quelle: [19]) Im folgenden wird die Installation des Servers auf MacOSX 10.8 Mountain Lion beschrieben und ein einfaches Beispiel mit dem offiziellen Java-Client, um die Funktionalität zu illustrieren. 1) Download und Installation: Der RabbitMQ-Server liegt aktuell in der Version 3.0.1 (Januar 2013) vor. Der Server lässt sich nicht nativ auf OSX installieren. Man muss zunächst sicherstellen, dass bereits die Addon-Software Homebrew [20] installiert ist. Die restlichen Abhängigkeiten werden dann bei der Installation von RabbitMQ automatisch nachinstalliert. Hat man alle Vorbereitungen getroffen, wird das Terminal geöffnet und folgendermaßen installiert: //aktuelle Homebrewupdates laden brew update // RabbitMQ Server installieren brew install rabbitmq Nach erfolgreicher Installation werden dem Nutzer die wichtigsten Informationen präsentiert, die man im weiteren Verlauf benötigt: Management Plugin enabled by default at http:// localhost:15672 Zunächst wechseln wir in das Verzeichnis, in dem der Client entpackt wurde. Dort legen wir zwei neue Dateien (Send.java und Recv.java) an. Als Erstes befassen wir uns mit dem Sender. Für die Kommunikation müssen drei Imports hinzugefügt werden, damit die Verbindungen zum Server aufgebaut werden können. Jede Warteschlange muss bezeichnet werden, was unter QUEUE NAME gemacht wurde. Sollte die Bezeichnung für Warteschlange bereits vergeben sein, dann wird die bestehende Warteschlange verwendet (Idempotenz). Die Verbindung wird aufgebaut und auf der Verbindung wird ein Kanal zum Versand geöffnet. Auf dem Kanal wird die Warteschlange bekannt gegeben und danach die Nachricht veröffentlicht. Zur Kontrolle wird diese auch auf der Konsole ausgegeben und danach werden der Kanal und die Verbindung wieder geschlossen. Listing 1 zeigt den vollständigen JavaCode. Listing 1. send.java import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; public class Send { private final static String QUEUE_NAME = "Erste RabbitMQ Warteschlange"; public static void main(String[] argv) throws java .io.IOException { //Verbindung aufbauen und Kanal erstellen ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); 5 Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println(" [x] Sent ’" + message + "’" ); //Verbindungen schliessen channel.close(); connection.close(); } } Um Nachrichten zu empfangen, muss zusätzlich zum Versand, noch ein weiterer Import hinzugefügt werden, damit auch Nachrichten konsumiert, oder empfangen werden können. Auch hier wird wieder die Warteschlange deklariert. Sollte der Fall eingetreten sein, dass der Empfänger vor dem Sender gestartet wird, wird damit auch wieder die Warteschlange angelegt. Der Sender würde sich dann auf diese Verbinden und die Idempotenz ist weiterhin gegeben. Der Konsument fordert nun auf dem Kanal die Warteschlange an und gibt, solange es Nachrichten in der Warteschlange gibt, diese auf der Konsole aus. Listing 2 zeigt auch hier den vollständigen Java-Code. Listing 2. recv.java } } 3) Kompilierung und Ausführung: Um das Beispiel auführen zu können, muss es zunächst kompiliert werden: javac -cp rabbitmq-client.jar Send.java Recv.java Um den Sender auszuführen: java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar: rabbitmq-client.jar Send Die Nachrichten werden folgendermaßen empfangen: java -cp .:commons-io-1.2.jar:commons-cli-1.1.jar: rabbitmq-client.jar Recv IV. M ESSAGE Q UEUING S ERVICES Message Queuing Services (MQS) sind die neueste Entwicklung im Bereich Message Oriented Middleware. Die Funktionalitäten der MOM-Systeme werden in eine Cloud verschoben, verbunden mit der Einbettung der Software in ein “Software as a Service Modell“. Nutzer können somit einfach Nachrichten aus der Warteschlange abrufen oder veröffentlichen, wenn sie mit dem Internet verbunden sind. Ziele der MQS sind: • • import import import import com.rabbitmq.client.ConnectionFactory; com.rabbitmq.client.Connection; com.rabbitmq.client.Channel; com.rabbitmq.client.QueueingConsumer; public class Recv { private final static String QUEUE_NAME = "Erste RabbitMQ Warteschlange"; public static void main(String[] argv) throws java .io.IOException, java.lang. InterruptedException { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); //Auf die gleiche Warteschlange verbinden channel.queueDeclare(QUEUE_NAME, false, false, false, null); System.out.println(" [*] Waiting for messages. To exit press CTRL+C"); //Einen Konsumenten auf den Kanal hoeren lassen QueueingConsumer consumer = new QueueingConsumer (channel); channel.basicConsume(QUEUE_NAME, true, consumer) ; //solange es Nachrichten gibt, gebe diese aus while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); String message = new String(delivery.getBody ()); System.out.println(" [x] Received ’" + message + "’"); } • • ungenutzte Kapzitäten freisetzen Kosten-Einsparungen (z.B. Wartungspersonal) Vereinfachung des Zugriffs auf die Warteschlange Performancesteigerung durch dedizierte Serverlandschaft Um eine Vielzahl von Nutzern zu erreichen, bieten die Lösungen eine Vielzahl an Protokollen, wie JMS, AMQP, REST-style APIs und Webservices an [10]. A. Amazon Simple Queue Service Amazon Simple Queue Service (Amazon SQS) bietet solch eine zuverlässige, hochskalierbare, gehostete Warteschlange zum Speichern von Nachrichten. Durch Amazon SQS können Entwickler auf einfache Weise Daten zwischen verteilten Komponenten ihrer Anwendungen, die verschiedene Aufgaben ausführen, verschieben. Dabei gehen keine Mitteilungen verloren und es muss nicht jede Komponente stets verfügbar sein. Amazon SQS vereinfacht das Erstellen eines automatisierten Workflows und arbeitet eng mit Amazon Elastic Compute Cloud (Amazon EC2) und den anderen AWS-Infrastruktur-Web-Services zusammen [21]. Amazon SQS funktioniert durch die Offenlegung der weboptimierten Mitteilungs-Infrastruktur von Amazon als WebService. Jeder Computer mit Verbindung ins Internet kann Mitteilungen hinzufügen oder lesen, ohne dass dafür Software installiert oder die Firewall speziell konfiguriert werden muss. Komponenten von Anwendungen, die Amazon SQS verwenden, können unabhängig ausgeführt werden und müssen sich nicht im selben Netzwerk befinden, mit denselben Technologien entwickelt worden sein oder zur selben Zeit ausgeführt werden. 6 B. Microsoft Azure Services Platform Microsoft hat im Februar 2012 auf der CeBIT, die Microsoft Azure Services Platform gestartet [22]. Microsoft zentralisiert damit die verschiedensten Dienste in die Cloud und versucht damit gegenüber dem Kunden als ein Full-Service-Anbieter aufzutreten. Die Platform vereint unter anderem: • • • • • Webseitenhosting Virtuelle-Maschinen Cloud-Services Data-Services Messaging (Windows Azure Service Bus) Der Windows Azure Service Bus stellt hier ähnlich wie Amazon, Queuing Services bereit [23]. Microsoft hält hier eine REST konforme Schnittstelle, ebenso wie Konnektivitätsoptionen für die Windows Communication Foundation (WCF) bereit. V. Z USAMMENFASSUNG Einstige alleinige Marktführer wie IBM bekommen nun schon seit Jahren den Druck der Mitbewerber zu spüren. Der Markt der Message Oriented Middleware ist einer der umkämftesten der Computerbranche. Dass sich auch hier der Markt immer mehr zu einem Käufermarkt entwickelt, sieht man vorallem an Firmen wie IBM, die ihrer Closed Source Plattform Websphere MQ immer mehr Proxies für diverse Open-Source Sprachen zur Verfügung stellen. Der Grund für die Vielfalt an Open-Source Lösungen ist sicher im Advanced Messaging Protocol zu sehen. Der Erfolg des Protokolls liegt in seiner Qualität. Weder im Bezug auf Geschwindigkeit noch im Bezug auf Customizing lässt es dem Programmierer Wünsche offen. Die Entwicklung des Protokolls hat für eine wahre Explosion an Produkten gesorgt. Unter anderem auch RabbitMQ, das in Bezug auf Kompabilität zu anderen Produkten seinesgleichen sucht. Ermöglicht wird auch das wieder durch das AMQP-Protokoll. Hinzu kommt bei RabbitMQ, dass die Dokumentationen im Internet und vor allem auf der Herstellerseite sehr gut sind. Die Forenunterstützung ist gut, was auch die hohe Anzahl an Clients und die Vielfalt an Programmiersprachen zeigen. Umso überraschender ist der Umstand, dass die neu angebotenen Cloud-Lösungen nun auch wieder propietäre Protokolle verwenden. So ist es nicht ungewöhnlich, dass die Internetforen voll von Diskussionen sind, was denn nun beser sei, Amazon SQS oder RabbitMQ. Vor allem da man RabbitMQ auch auf der Amazon EC2 Cloud betreiben kann. Die weitere Entwicklung wird sicher weiter Richtung CloudServices gehen. Zu günstig sind die Lösungen geworden, zu einfach deren Wartbarkeit, zu Ausfallsicher. Die Anbindung eines jeden Internetnutzers ist so gut geworden, dass auch hier keine Bandbreitenprobleme oder Geschwindigkeitsprobleme auftreten können. Dennoch werden sie Lösungen wie RabbitMQ nicht ablösen. Wahrscheinlicher ist es, dass die Welten weiter zusammenwachsen. L ITERATUR [1] B. Turakhia. Investigating message queueing systems. [Online]. Available: http://bhavin.directi.com/investigating-message-queueing-systems/ [2] IBM. What is message queuing? [Online]. Available: http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp? topic=%2Fcom.ibm.mq.csqzal.doc%2Ffg10240 .htm [3] Wikipedia. Message queue. [Online]. Available: http://en.wikipedia.org/ wiki/Message queue [4] MSDN. About messages and message queues. [Online]. Available: http://msdn.microsoft.com/en-us/library/ [5] Linux. Linux and posix message queues. [Online]. Available: http://linux.die.net/man/7/mqoverview/ [6] Event-driven architecture overview. [Online]. Available: http://www. omg.org/soa/Uploaded%20Docs/EDA/bda2-2-06cc.pdf [7] E. Curry. Message-oriented middleware. [Online]. Available: http: //www.edwardcurry.org/publications/curry MfC MOM 04.pdf [8] Wikipedia. Message-oriented middleware. [Online]. Available: http: //en.wikipedia.org/wiki/Message-oriented middleware [9] IT-Wissen. Mom (message oriented middleware). [Online]. Available: http://www.itwissen.info/definition/lexikon/ message-oriented-middleware-MOM.html [10] Wikipedia. Message queuing service. [Online]. Available: http: //en.wikipedia.org/wiki/Message queuing service [11] IETF. Extensible messaging and presence protocol (xmpp). [Online]. Available: http://datatracker.ietf.org/wg/xmpp/charter/ [12] Wikipedia. Xmpp. [Online]. Available: http://en.wikipedia.org/wiki/ XMPP [13] IETF. Rfc6120. [Online]. Available: http://tools.ietf.org/html/rfc6120 [14] Wikipedia. Advanced message queing protocol. [Online]. Available: http://en.wikipedia.org/wiki/AMQP [15] OASIS, OASIS Advanced Message Queuing Protocol (AMQP) Version 1.0, OASIS, 2012. [16] T. A. S. Foundation. Activemq. [Online]. Available: http://activemq. apache.org/ [17] Wikipedia. Apache activemq. [Online]. Available: http://en.wikipedia. org/wiki/Apache ActiveMQ [18] Erlang programming language. [Online]. Available: http://www.erlang. org/ [19] G. T. Talk. Introduction to rabbitmq. [Online]. Available: http://www.rabbitmq.com/resources/google-tech-talk-final/ alexis-google-rabbitmq-talk.pdf [20] M. Howell. Homebrew - the missing package manager for osx. [Online]. Available: http://mxcl.github.com/homebrew/ [21] Amazon. Amazon simple queue service (amazon sqs). [Online]. Available: http://aws.amazon.com/de/sqs/ [22] Microsoft. Windows azure: die cloud plattform von microsoft. [Online]. Available: http://www.windowsazure.com/de-de/ [23] MSDN. Windows azure service bus. [Online]. Available: http: //msdn.microsoft.com/de-de/library/ee732537.aspx