Was sind die Vorteile der Verwendung von WCF über Frameworks wie Masstransit oder Hand geschrieben MSMQ-Client?

StackOverflow https://stackoverflow.com/questions/617859

Frage

Ich suche MSMQ als Lösung bei Verwendung von asynchroner Ausführung in meinem nächsten Projekt zu tun. Ich mag die Unterschiede kennen zwischen WCF und Frameworks wie Masstransit oder sogar handgeschriebene MSMQ Client Ort / Lese Aufgabe aus MSMQ.

Im Grunde genommen wird die Anwendung mehrere Websites sein (intern über LAN oder extern über das Internet) Lesen / Schreiben von Daten über eine Service-Schicht (sei es WCF oder normale Web-Service). Dann wird dieser Service-Schicht eines von zwei Dingen tun: 1. Schreibdaten in die Datenbank 2. und / oder den Hintergrundprozess ausgelöst wird, um eine Nachricht in der Warteschlange platzieren. 3. offensichtlich kann es auch Daten aus der Datenbank abgerufen werden. Der kleine Agent (ein Windows-Dienst) auf der anderen Seite der Warteschlange die Warteschlange überwachen und auf der Grundlage der Task-Befehl auszuführen.

Diese Architektur wird ganz einfach zu skalieren (mehr Warteschlangen und Agenten hinzufügen) und einfach zu implementieren im Vergleich zu RPC oder verteilen Ausführung oder was auch immer. Und der Agent Verarbeitung braucht nicht in Echtzeit zu sein. Und der Agent und Service-Layer sind separate Anwendungen, außer daß sie die gemeinsamen Domain-Objekte teilen und Repositorys etc.

Was denken Sie? Architektur Vorschläge für die oben genannten Anforderungen sind willkommen. Vielen Dank!

War es hilfreich?

Lösung

WCF fügt eine Abstraktion über MSMQ. In der Tat, wenn Sie kompatibel Verträge definieren (Operationen müssen OneWay) Sie MSMQ in dem Konfigurationsschalter aus, transparente. (Zum Beispiel, Sie zu normalen HttpWS wechseln könnten oder ein NetTcp Bindung.)

Sie sollten die anderen WCF Vorteile, wie die Sicherheit bewerten und so weiter, um zu sehen, wie diese mit Ihren Bedürfnissen passen. Auch hier sollten sie einigermaßen transparent der Tatsache sein, Sie MSMQ unter verwenden. Zum Beispiel SOAP Sicherheit hinzufügen und so weiter soll „arbeiten nur“, unabhängig von MSMQ verwenden.

(Obwohl, IIRC, haben Sie immer auf den Desktop auf jeden Computer anmelden müssen, die MSMQ verwendet, mit dem Dienstkonto, das MSMQ verwenden , das Zertifikat in den Maschinen lokales Profil zu erzeugen. Und dann ist es nicht sehr gut aus IIS6 arbeiten, da Benutzerprofile nicht geladen werden. Einen echten Schmerz im allgemeinen, aber nichts mit WCF speziell zu tun.)


Ansonsten:

Haben Sie sich SQL Server Service Broker? Nach der Verwendung von MSMQ + WCF und SSSB, denke ich, dass SSSB ist in beträchtlichem Ausmaß einfacher zu konfigurieren und zu verwalten. SSSB arbeitet mit T-SQL beliebigen SQL-Client-Befehlen über (ich es von Mono verwenden, unter Linux, mit Transaktionen). Es gebe auch transaktionale Sie senden / empfangen, auch nur entfernt (ich glaube, MSMQ 4 jetzt dies erlaubt). Es dauert wirklich eine Menge Schmerz von Message Queuing entfernt, und wenn Sie SQL Server verwenden bereits ...

SSSB wird oft seit dem SQL Management Studio übersehen hat keine GUI-Designer für alles, aber es ist nicht schwer und ist eine gute Option. Der einzige Nachteil ist, dass wenn Sie lokale Sendefähigkeit wollen (das heißt Warteschlange Nachricht, wenn das Netzwerk ausgefallen ist), werden Sie eine lokale SQL Express-Instanz laufen müssen.

Andere Tipps

Ihre Architektur scheint solide und vernünftig. Allerdings sollten Sie die WCF-net MSMQ Transport über Hand codiert MSMQ-Klassen. WCF hüllt diese gemeinsame Funktionalität in ein schönes Programmiermodell. Auch ich glaube, dass es einige Verbesserungen in dem Protokoll, das von wcf verwendet im Vergleich zu Grunde System.Messaging

Haben Sie einen Blick auf die Value-Add über Normal MSMQ:

http://readthedocs.org/docs/masstransit/en/ latest / Übersicht / valueadd.html

Zusammenfassend Sie viele Messaging-Konzepte erhalten deutlich in der API mit Masstransit präsentiert; in einem solchen Ausmaß haben Sie sich nicht, wenn Sie es von Hand codiert oder WCF verwendet.

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