Welche Vorteile hat WCF gegenüber Frameworks wie MassTransit oder handgeschriebenen MSMQ-Clients?

8

Ich möchte MSMQ als Lösung für die asynchrone Ausführung in meinem nächsten Projekt verwenden. Ich möchte wissen, die Unterschiede zwischen WCF und Frameworks wie MassTransit oder sogar handgeschriebene MSMQ-Client, um Task von MSMQ zu setzen / lesen.

Grundsätzlich wird die Anwendung mehrere Websites sein (intern über LAN oder extern über das Internet), die Daten über eine Service-Schicht lesen / schreiben (sei es WCF oder normaler Web-Service). Dann wird dieser Service-Layer eines von zwei Dingen tun: 1. Daten in die Datenbank schreiben 2. und / oder den Hintergrundprozess auslösen, indem eine Nachricht in die Warteschlange gestellt wird. 3. Natürlich kann es auch Daten aus der Datenbank abrufen. Der kleine Agent (ein Windows-Dienst) auf der anderen Seite der Warteschlange überwacht die Warteschlange und führt sie basierend auf dem Task-Befehl aus.

Diese Architektur wird sehr einfach zu skalieren sein (mehr Warteschlangen und Agenten hinzufügen) und im Vergleich zu RPC oder verteilter Ausführung oder was auch immer einfach zu implementieren sein. Und die Agentenverarbeitung muss nicht Echtzeit sein. Und die Agenten- und Serviceebene sind separate Anwendungen, außer dass sie die gemeinsamen Domänenobjekte und Repositories usw. gemeinsam nutzen.

Was denkst du? Architekturvorschläge für die oben genannten Anforderungen sind willkommen. Danke!

    
Jeff 06.03.2009, 07:36
quelle

3 Antworten

7

WCF fügt eine Abstraktion über MSMQ hinzu. Sobald Sie kompatible Verträge definiert haben (Operationen müssen OneWay sein), können Sie MSMQ in der Konfiguration transparent deaktivieren. (Zum Beispiel könnten Sie zu normalen HttpWS oder einer NetTcp-Bindung wechseln.)

Sie sollten die anderen WCF-Vorteile wie Sicherheit usw. bewerten, um zu sehen, wie diese Ihren Anforderungen entsprechen. Auch hier sollten sie einigermaßen transparent sein, dass Sie darunter MSMQ verwenden. Zum Beispiel sollte das Hinzufügen von SOAP-Sicherheit und so weiter "einfach funktionieren", unabhängig von der Verwendung von MSMQ.

(IIRC, Sie müssen sich immer noch auf jedem Computer anmelden, der MSMQ verwendet, mit dem Dienstkonto, das MSMQ verwendet, um das Zertifikat im lokalen Profil des Rechners zu generieren.) Und dann funktioniert es nicht sehr gut von IIS6, da Benutzerprofile nicht geladen sind. Ein echter Schmerz im Allgemeinen, aber nichts mit WCF spezifisch zu tun.)

Abgesehen davon:

Haben Sie sich SQL Server Service Broker angesehen? Nachdem ich MSMQ + WCF und SSSB benutzt habe, denke ich, dass SSSB viel einfacher zu konfigurieren und zu verwalten ist. SSSB arbeitet mit T-SQL-Befehlen über jeden SQL-Client (ich verwende es von Mono, unter Linux, mit Transaktionen). Es wird Ihnen auch transaktionales Senden / Empfangen geben, sogar remote (ich denke, MSMQ 4 ermöglicht dies jetzt). Es nimmt wirklich viel von der Nachrichtenwarteschlange weg und wenn Sie bereits SQL Server verwenden ...

SSSB wird oft übersehen, da das SQL Management Studio keine GUI-Designer für alles hat, aber es ist nicht schwer und ist eine gute Option. Der einzige Nachteil besteht darin, dass Sie eine lokale SQL Express-Instanz ausführen müssen, wenn Sie eine lokale Sendefunktionalität wünschen (d. H. Eine Nachrichtenwarteschlange bei einem Netzwerkausfall).

    
MichaelGG 06.03.2009, 18:09
quelle
2

Ihre Architektur scheint vernünftig und vernünftig zu sein. Sie sollten jedoch in Erwägung ziehen, den WCF-MSMQ-Netztransport über handcodierte MSMQ-Klassen zu verwenden. WCF umschließt diese allgemeine Funktionalität in ein nettes Programmiermodell. Ich glaube auch, dass es einige Verbesserungen in dem Protokoll gibt, das von der WCF im Vergleich zur grundlegenden System.Messaging verwendet wird.

    
flalar 06.03.2009 08:48
quelle
1

Sehen Sie sich die Value-Add-Over-Ebene MSMQ an:

Ссылка

Zusammenfassend erhalten Sie eine Menge von Messaging-Konzepten, die in der API mit MassTransit übersichtlich dargestellt werden. in einem Ausmaß, das Sie nicht hätten, wenn Sie es handcodiert oder WCF verwendet hätten.

    
Henrik 26.04.2012 18:15
quelle