2010-05-19 5 views
26

In meinem Team bei der Arbeit verwenden wir die IBM MQ-Technologie viel für die anwendungsübergreifende Kommunikation. Ich habe in letzter Zeit Hacker News und andere Orte über andere MQ Technologien wie RabbitMQ gesehen. Ich habe ein grundlegendes Verständnis davon, was es ist (ein allgemein überprüfter Bereich, um Nachrichten zu stellen und zu bekommen), aber was will ich wissen, worin genau es gut ist? Woher weiß ich, wo ich es verwenden möchte und wann? Warum nicht einfach bei rudimentären Formen der Interprozess-Messaging bleiben?Was ist ein MQ und warum möchte ich ihn verwenden?

Antwort

40

Alle bisherigen Erklärungen sind präzise und auf den Punkt - aber möglicherweise etwas fehlt: einer der wichtigsten Vorteile von Message Queuing: Belastbarkeit.

Stellen Sie sich vor: Sie müssen mit zwei oder drei anderen Systemen kommunizieren. Ein gängiger Ansatz in diesen Tagen wird Web-Services, die in Ordnung ist, wenn Sie sofort eine Antwort benötigen.

Allerdings: Web-Services können nicht verfügbar sein - was machen Sie dann?Wenn Sie Ihre Nachricht in eine Nachrichtenwarteschlange schreiben (in der sich auch eine Komponente auf Ihrem Computer/Server befindet), funktioniert das in diesem Szenario in der Regel - Ihre Nachricht wird gerade nicht zugestellt und verarbeitet - aber später, wenn die andere Seite des Dienstes kommt wieder online.

In vielen Fällen ist die Verwendung von Nachrichtenwarteschlangen zum Verbinden unterschiedlicher Systeme eine zuverlässigere und stabilere Möglichkeit, Nachrichten hin- und herzusenden. Es funktioniert nicht gut für alles (wenn Sie die aktuellen Aktienpreis für MSFT wissen möchten, ist die Anfrage in eine Warteschlange nicht die beste Idee) - aber in vielen Fällen, wie eine Bestellung in Ihre Die Nachrichtenwarteschlange des Anbieters funktioniert sehr gut und kann dazu beitragen, einige Zuverlässigkeitsprobleme mit anderen Technologien zu lösen.

+0

Sehr interessanter Anwendungsfall, macht sehr viel Sinn für mich. Vielen Dank! – daveslab

+1

Was machen Sie also, wenn der MQ-Server ausgefallen ist? Es ist nicht widerstandsfähiger als ein Web-Service, oder? –

+1

@RobHolmes: In der Regel können Sie es in Ihre lokale Warteschlange einfügen * - es wird an den Warteschlangenserver übertragen, wenn es wieder hochfährt - und ** ja **, es ist ** stabiler als ein typisches Web Service ..... –

2

MQ steht einfach für Message Queue.

Sie würden eine verwenden, wenn Sie zuverlässig eine prozessübergreifende/plattformübergreifende/anwendungsübergreifende Nachricht senden möchten, die nicht zeitabhängig ist.

Die Nachrichtenwarteschlange empfängt die Nachricht, platziert sie in die richtige Warteschlange und wartet darauf, dass die Anwendung die Nachricht abruft, wenn sie bereit ist.

6

Message Queueing-Systeme sollen Ihnen mehrere Boni geben. Zu den wichtigsten zählen Überwachung und Transaktionsverhalten.

Das Transaktionsdesign ist wichtig, wenn Sie gegen Ausfälle wie Stromausfall immun sein wollen. Stellen Sie sich vor, Sie möchten ein Banksystem über die Geldentnahme informieren, und zwar genau einmal pro Anfrage, unabhängig davon, welche Server vorübergehend in der Mitte ausgefallen sind. Mit MQ-Systemen können Sie Transaktionen über mehrere Datenbanken, MQ und andere Systeme hinweg koordinieren.

Unnötig zu sagen, solche Systeme sind sehr langsam im Vergleich zu Named Pipes, TCP oder anderen nicht-transaktionalen Tools. Wenn eine hohe Leistung erforderlich ist, können Sie nicht zulassen, dass Ihre Nachrichten über die Festplatte geschrieben werden. Stattdessen wird es Ihr Design komplizieren - exotische zuverlässige UND schnelle Kommunikation zu erreichen, die den Designer in wirklich nicht triviale Tricks treibt.

MQ-Systeme normalerweise können Benutzer die Warteschlange Inhalte sehen, schreiben Plugins, klare queus usw.

+0

Gute Antwort, danke für Ihre Eingabe! – daveslab

11

MQ für Messaging-Warteschlange steht.

Es ist eine Abstraktionsschicht, die es mehreren Prozessen (wahrscheinlich auf verschiedenen Rechnern) ermöglicht, über verschiedene Modelle zu kommunizieren (z. B. Punkt-zu-Punkt, Veröffentlichen, Abonnieren usw.). Abhängig von der Implementierung kann es für Dinge wie garantierte Zuverlässigkeit, Fehlerberichte, Sicherheit, Entdeckung, Leistung usw. konfiguriert werden.

Sie können all dies manuell mit Sockets tun, aber es ist sehr schwierig.

Zum Beispiel: Angenommen, Sie wollen Prozesse kommunizieren, aber einer von ihnen kann in der Mitte sterben und später wieder verbunden werden. Wie würden Sie sicherstellen, dass vorläufige Nachrichten nicht verloren gingen? MQ-Lösungen können das für Sie tun.

0

Nachrichtenwarteschlangen bilden die Grundlage für viele der Muster, die im klassischen Buch "Enterprise Integration Patterns" und website beschrieben sind.

0

Referenz: Web-Services können down und nicht verfügbar sein - was machst du dann? Als Erweiterung dazu; Was ist, wenn Ihr lokales Netzwerk und Ihr lokaler PC ebenfalls defekt ist? Während Sie darauf warten, dass das System die abhängigen bereitgestellten Systeme wiederherstellt, die auf diese Daten warten, muss ein alternativer Datenstrom angezeigt werden. Sonst wäre das nicht gut genug "Echtzeit" Antwort für die heutigen und sehr bald in der Zukunft von Internet of Things (IOT) Anforderungen.

Wenn Sie eine echte parallele, nicht flüchtige Speicherung verschiedener FIFO-Streams (zumindest an einem bestimmten Punkt entlang der Signalkette) wünschen, verwenden Sie einen FPGA- und FRAM-Speicher. FRAM läuft mit Taktgeschwindigkeit und FPGA-Geräte können während des Hinzufügens und Wegnehmens neu programmiert werden, jedoch werden viele unabhängige parallele Datenströme benötigt (innerhalb der festgelegten Beschränkungen natürlich).