Frage

Was sind die Motivationen für die Verwendung eines meldungsbasierten Systems?

Ich sehe viel über Service -Busse wie Nservicebus und Nahverkehr Und ich frage mich, wie die Vorteile der zugrunde liegenden Methodik sind.

War es hilfreich?

Lösung

Die Verwendung von meldungsbasierten Systemen hat mehrere Vorteile.

  1. Nachrichten bilden eine gut definierte Technologie -neutrale Schnittstelle zwischen Anwendungen.
  2. Ermöglicht die lose Kupplung von Anwendungen.
  3. Viele Optionen für Leistung, Tuning und Skalierung:
    • Stellen Sie den Antragsteller und den Serviceprozess auf verschiedenen Hardware ein
    • Mehrere Einfragen teilen einen einzelnen Server
    • Mehrere Antragsteller teilen mehrere Server
  4. Die verschiedenen Messaging Middlewares implementieren die gemeinsamen Messaging -Muster unabhängig von Ihrer Anwendung.
    • Anfrage/Antwort
    • Feuer und vergessen Offline -Updates
    • Veröffentlichen/abonnieren
  5. Viele der Middleware -Produkte verarbeiten die Meldungstransformation (z. B. Swift bis SwiftXML).
  6. Viele der Middleware -Produkte können eine einzige große Anfrage in mehrere kleinere Anfragen zerlegen.
  7. Sie unterstützen fast alle mehrere Plattformen.

Übrigens sind die beiden Marktführer in diesem Bereich IBM mit ihrem WebSphere MQ und verwandten Produkten sowie Tibco mit ihrem Enterprise Service Bus.

Andere Tipps

Eine meldungsbasierte Architektur enthält Produzenten und Verbraucher von Nachrichten, sowohl zeitlich als auch räumlich. Dies hat viele Vorteile:

  • Hersteller und Verbraucher können auf verschiedenen Maschinen laufen
  • Hersteller und Verbraucher können zu unterschiedlichen Zeiten laufen.
  • Hersteller und Verbraucher können auf verschiedenen Hardware-/Software -Plattformen ausgeführt werden (sie müssen nur das gleiche Nachrichtenprotokoll verstehen).
  • Es ist einfach, mehrere Hersteller / Verbraucher zu koordinieren (z. B. für rechenintensive Jobs, die mehrere Maschinen benötigen, wie Dave Markle beschrieben hat).
  • Höhere Stabilität, wenn die Dienste vorübergehend nicht verfügbar sind (z. B. bei der Auftragsverarbeitung, kann die Verwendung eines Messaging -Systems dazu beitragen, "Bestellungen fallen zu lassen").

Sie verlieren die meisten dieser Vorteile, wenn Sie Kommunikation im RPC-Stil durchführen (dh wenn Sie blockieren, während Sie auf Serviceantworten warten)

Ein Anwendungsfall ist, wenn Sie über einen Pool von Ressourcen verfügen, die an einem bestimmten Element arbeiten können, und eine Liste von Arbeiten, die skalierbar verteilt werden müssen.

Ich hatte einmal ein Projekt, bei dem ich Mainframe -Integration mit einer Reihe von 3270 Bildschablern (alle langsam) durchführen musste. Ich könnte höchstens 10 dieser Prozesse gleichzeitig auf einer Schachtel geöffnet haben. Ich hatte Tausende von Konten, um Bildschirm zu kratzen und zu aktualisieren. Deshalb habe ich die Arbeit in eine Warteschlange gestellt, und meine Maschinen (ich hatte ungefähr 3 von EM) haben gerade Arbeitselemente von der Message Queue (MSMQ) abgeholt und ihr Bildschirmkratzer gemacht. und das war es. Ich könnte leicht eine neue Maschine aufspannen oder alte deaktivieren, ohne den Arbeitsfluss zu unterbrechen, das war also schön.

Die Vorteile sind wirklich darauf zurückzuführen, dass die Teile Ihrer Bewerbung entkoppelt werden. Sobald Sie den Bus eingerichtet haben und Anwendungen hinzugefügt werden, können Sie Ihre App problemlos erweitern, indem Sie neue Teile hinzufügen, die Sie garantieren können, die die anderen Teile nicht beeinflussen. Es ist eine sehr gute Möglichkeit, im Laufe der Zeit ein System ständig zu erweitern.

z.B. Wir haben ein System wie dieses, jeder Befehl wird als Teil der Gesamt -GUI implementiert. Wenn wir eine neue Funktion hinzufügen oder eine vorhandene ändern möchten, schreiben wir einfach ein neues Teil und fügen es dem System hinzu. Wenn es angerufen wird, hat es keine Abhängigkeiten vom Rest. Dies bedeutet, dass wir unsere App sehr leicht erweitern können. Außerdem haben wir eine Nachricht, die zwischen Knoten in unserem Netzwerk übergeht. Wenn etwas in 1 Computer geändert wird, wird eine Nachricht an alle anderen gesendet, damit sie sich selbst aktualisieren können. Wir haben hundert verschiedene Nachrichten für verschiedene Ereignisse, sodass wir das System erweitern können, indem wir einen neuen Dienst in den entsprechenden Nachrichten fallen lassen.

Nachrichtenübergabe -Architekturen haben in der Regel die gleichen Funktionen wie Webdienste. Sie haben diskrete Dienste, die Sie anrufen können. Sie können einfach neue hinzufügen.

Denken Sie nicht, dass die Nachrichten -Passing -Architekturen ausgefallene (und teure!) Middleware -Produkte erfordern, Windows läuft auf einer Nachrichten -Passing -Architektur aus - jede WM_* -Meldung, die an ein Fenster übergeben ist Beispiel für die Architektur - Kein Teil eines Systems muss über einen anderen Teil wissen. Sie können es unendlich erweitern, da Sie so viele Steuerelemente wie Sie auf jedem Dialog usw. verarbeiten können.

Das Passieren von Nachrichten ist eine fabelhafte Architektur, obwohl sie langsamer sein kann, als Ihre Anwendung eng zu koppeln. Dies ist kein großer Grund, sie heutzutage nicht zu verwenden, insbesondere wenn Sie bereits Skript- oder .NET -Apps verwenden.

Nachrichtenorientiertes System sind im Allgemeinen gut für bestimmte Klassen von Integrationsproblemen. Andere Alternativen haben einen gemeinsam genutzten Datenspeicher (Datei oder DB -basierend) für Anwendungen, die mit oder Anwendungen über RPC integriert werden können.

Die Vorteile der Nachrichten gegenüber diesen Integrationsmustern bestehen darin, dass Sie nicht beide Anwendungen mit demselben Datenspeicherschema koppeln und Anwendungen nicht an einen Punkt -zu -Punkt -RPC -Integrationsszenario binden (was komplexer wird, je mehr Anwendungen beteiligt sind).

Es gibt auch die Vorteile einer asynchronen Kommunikation (wie E -Mail vs. Online -Chat) und Message Routing- und Transformationsmöglichkeiten.

Ich half bei der Entwicklung eines für ein System, das C# und Remoting verwendete. Der Client (ein Dienst oder eine GUI) könnte eine Nachricht mit einigen benutzerdefinierten Daten senden, und die Empfänger (en) würden sie entweder beim nächsten oder sofort angeschlossenen oder sofort) erhalten. Sie konnten dann die Nachricht verarbeiten (indem sie im Falle der Lastausgleichsdienste Eigentümer davon nehmen). Es wurde auch verwendet, um die GUIs zu aktualisieren, wenn lang laufende Prozesse abgeschlossen waren.

Das Messaging -System selbst hatte konfigurierbare Pipelines, die jede Nachricht verarbeitet haben. Hier finden Sie einige Beispiele für einige der von uns entwickelten Pipelines:

  • Speicher (erstellt/ gespeichert die Nachricht in der Datenbank)
  • Routing (ausgearbeitet, wo die Nachricht gesendet werden muss)
  • Sicherheit (ausgearbeitet, wenn der Kunde es empfangen durfte)
  • Löschen (funktioniert heraus, wenn die Nachricht aus dem System gelöscht werden muss, was bedeutet, dass Clients benachrichtigt werden und die Meldung aus dem Cache entfernt und im DB markiert werden).
  • TakeOwnership (Angebote, um sicherzustellen, dass nur ein Client den Status einer Nachricht gleichzeitig ändern kann, da nur Nachrichten geändert werden können)

Als Antwort auf Ihre Frage sind Messaging -Systeme ein brillantes Mittel, um Informationen darüber zu senden, wann Sie den WHO -Kunden nicht kennen oder kümmern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top