Wenn Sie einen Webdienst verwenden, haben Sie einen Client und einen Server:
- Wenn der Server ausfällt, muss der Client die Verantwortung für die Behandlung des Fehlers übernehmen.
- Wenn der Server wieder funktioniert, ist der Client für das erneute Senden verantwortlich.
- Wenn der Server eine Antwort auf den Anruf gibt und der Client fehlschlägt, geht der Vorgang verloren.
- Sie haben keine Konflikte, das heißt: Wenn Millionen von Clients in einer Sekunde einen Webdienst auf einem Server aufrufen, fällt Ihr Server höchstwahrscheinlich aus.
- Sie können eine sofortige Antwort vom Server erwarten, aber Sie können auch asynchrone Anrufe verarbeiten.
Wenn Sie eine Nachrichtenwarteschlange wie RabbitMQ, Beanstalkd, ActiveMQ, IBM MQ Series und Tuxedo verwenden, erwarten Sie unterschiedliche und fehlertolerantere Ergebnisse:
- Wenn der Server ausfällt, bleibt die Nachricht in der Warteschlange erhalten (optional auch, wenn der Computer heruntergefahren wird).
- Wenn der Server wieder arbeitet, erhält er die ausstehende Nachricht.
- Wenn der Server eine Antwort auf den Anruf gibt und der Client fehlschlägt, bleibt die Nachricht bestehen, wenn der Client die Antwort nicht bestätigt hat.
- Wenn Sie Konflikte haben, können Sie entscheiden, wie viele Anforderungen vom Server verarbeitet werden (nennen Sie es stattdessen Worker).
- Sie erwarten keine sofortige synchrone Antwort, können jedoch synchrone Anrufe implementieren / simulieren.
Nachrichtenwarteschlangen bieten viel mehr Funktionen. Dies ist jedoch eine Faustregel, um zu entscheiden, ob Sie Fehlerbedingungen selbst behandeln oder in der Nachrichtenwarteschlange belassen möchten.
In jüngster Zeit wurde viel darüber nachgedacht, wie REST-HTTP-Aufrufe das Konzept der Nachrichtenwarteschlange ersetzen könnten.
Wenn Sie das Konzept eines Prozesses und einer Aufgabe als Ressource einführen, beginnt der Bedarf an mittlerer Messaging-Schicht zu schwinden.
Ex:
Eine Aufgabe kann mehrere Schritte für die Initialisierung umfassen, und ein Prozess kann den Status bei Abfrage zurückgeben oder nach Abschluss an eine Rückruf-URL senden.
Dies ist denkbar einfach und wird sehr leistungsfähig, wenn Sie feststellen, dass Sie jetzt einen RSS / Atom-Feed aller laufenden Prozesse und Aufgaben ohne mittlere Ebene abonnieren können. Jedes Warteschlangensystem erfordert ohnehin eine Art Web-Frontend, und dieses Konzept hat es ohne eine weitere Ebene von benutzerdefiniertem Code eingebaut.
Ihre Ressourcen sind vorhanden, bis Sie sie löschen. Dies bedeutet, dass Sie historische Informationen lange nach Abschluss des Prozesses und der Aufgabe anzeigen können.
Sie haben die Serviceerkennung selbst für eine Aufgabe mit mehreren Schritten ohne besonders komplizierte Protokolle integriert.
Ihre Serviceerkennung ist ein HTML-Formular - ein universelles und für Menschen lesbares Format.
Der gesamte Fluss kann programmgesteuert oder von einem Menschen unter Verwendung allgemein anerkannter Werkzeuge verwendet werden. Es ist kundenorientiert und daher RESTful. Jedes für das Web erstellte Tool kann Ihre Geschäftsprozesse steuern. Sie haben immer noch alternative Nachrichtenkanäle, indem Sie asynchron auf ein separates Array von Protokollservern POSTEN.
Nachdem Sie eine Weile darüber nachgedacht haben, lehnen Sie sich zurück und stellen fest, dass REST möglicherweise keine Messaging-Warteschlange und keinen ESB mehr benötigt.
http://www.infoq.com/presentations/BPM-with-REST
quelle
Nachrichtenwarteschlangen sind ideal für Anforderungen, deren Verarbeitung lange dauern kann. Anforderungen werden in die Warteschlange gestellt und können offline verarbeitet werden, ohne den Client zu blockieren. Wenn der Client über den Abschluss informiert werden muss, können Sie dem Client die Möglichkeit geben, den Status der Anforderung regelmäßig zu überprüfen.
Mit Nachrichtenwarteschlangen können Sie auch im Laufe der Zeit besser skalieren. Es verbessert Ihre Fähigkeit, Bursts mit hoher Aktivität zu verarbeiten, da die eigentliche Verarbeitung über die Zeit verteilt werden kann.
Beachten Sie, dass Nachrichtenwarteschlangen und Webdienste orthogonale Konzepte sind, dh sich nicht gegenseitig ausschließen. Sie können beispielsweise einen XML-basierten Webdienst verwenden, der als Schnittstelle zu einer Nachrichtenwarteschlange fungiert. Ich denke, der Unterschied, den Sie suchen, ist Nachrichtenwarteschlangen gegenüber Anfrage / Antwort. Letzteres ist, wenn die Anfrage synchron verarbeitet wird.
quelle
Nachrichtenwarteschlangen sind asynchron und können mehrere Male wiederholt werden, wenn die Zustellung fehlschlägt. Verwenden Sie eine Nachrichtenwarteschlange, wenn der Anforderer nicht auf eine Antwort warten muss.
Der Ausdruck "Webdienste" lässt mich an synchrone Aufrufe einer verteilten Komponente über HTTP denken. Verwenden Sie Webdienste, wenn der Anforderer eine Antwort benötigt.
quelle
Ich denke, im Allgemeinen möchten Sie einen Webdienst für eine Blockierungsaufgabe (diese Aufgaben müssen abgeschlossen sein, bevor wir mehr Code ausführen) und eine Nachrichtenwarteschlange für eine nicht blockierende Aufgabe (kann eine Weile dauern, aber wir tun es nicht muss nicht darauf warten).
quelle