Wir haben einen zentralen Server, der Nachrichten von einer Reihe von PCs sendet und empfängt, die sich in Client-Netzwerken an verschiedenen Standorten befinden. Um dies zu erleichtern, verwende ich derzeit WCF mit TCPNetBindings und verwende Duplex-Kommunikation, die mit Zertifikaten gesichert ist.
Jetzt haben wir eine Reihe von Problemen damit - hauptsächlich, dass wir aufgefordert werden, den "getrennten Modus" zu unterstützen (wir müssen fehlertolerant sein). Soweit ich weiß, gibt es keine einfache Möglichkeit, dies mithilfe des WCF-Stacks zu tun - wir müssten etwas implementieren und möglicherweise msmq verwenden. Ich habe mir in letzter Zeit NServiceBus angeschaut und sehe, dass es gut zur Rechnung passt - Fehlertoleranz, Nachrichten können über ein einfaches http-Gateway usw. über das Internet gesendet werden Ich kann verstehen, warum das so ist, wenn ich es mir ansehe.
Meine Frage ist also ... Klingt der Einsatz von NServiceBus nach einer vernünftigen Idee, oder hat jemand andere Vorschläge / Erfahrungen aus der Praxis, die sich darauf beziehen? Ich glaube, ich mache mir Sorgen, eine neue Technologie einzuführen, die ich relativ wenig kenne, und Probleme mit der Sicherung, der zuverlässigen Einrichtung und weiteren Problemen zu haben. "Die Architektur plattieren" und etwas Glänzendes auswählen, das mich in der Implementierung stören wird, statt bei WCF zu bleiben und es nur für mich arbeiten zu lassen.
Vielen Dank!
quelle
Antworten:
Mein Vorschlag, wenn Sie schnell und einfach vorgehen müssen, um einen dauerhaften (getrennten) Betrieb mit WCF zu ermöglichen, ist ein Blick in die WCF-MSMQ-Bindungen. Wenn Sie in einer größeren Umgebung etwas benötigen, schauen Sie sich nServiceBus an.
In meinen Augen würde nServiceBus in einer größeren verteilten Umgebung wirklich zu glänzen beginnen. Nehmen Sie zum Beispiel das folgende Beispiel (das wäre die Hölle auf Erden mit WCF, aber einfach mit nServiceBus):
WCF verfügt über MSMQ-Bindungen
Wenn Sie sich jedoch hauptsächlich an WCF halten müssen (kurze Zeiträume, andere WCF-Funktionen), empfehle ich Ihnen, diesen Artikel bei MSDN zu lesen. Sie erfahren, wie Sie die WCF-Bindungen für MSMQ verwenden und anschließend einen Dienst von HTTP nach MSMQ migrieren. Auf dem Weg dorthin werden einige Probleme mit diesem Szenario (und nützliche Lösungen für diese Probleme) gezeigt.
In beiden Vorschlägen wird MSMQ in großem Umfang verwendet. Beachten Sie Folgendes: Im Gegensatz zu Apache MQ, RabbitMQ und anderen gängigen Warteschlangensystemen ist MSMQ keine typische brokerbasierte Warteschlangenarchitektur, sondern eine verteilte Warteschlange. Dies bedeutet, dass wenn Ihr WCF-Client eine Nachricht über einen MSMQ-Transport sendet, während keine Verbindung zu dem Remoteserver hergestellt werden kann, der die Warteschlange hostet, der Clientcomputer die Nachricht stattdessen lokal in eine Warteschlange einreiht, die als "ausgehende Warteschlange" bezeichnet wird. Die Nachricht bleibt dort sicher, bis der MSMQ-Dienst des Clients erkennt, dass er erneut eine Verbindung zum Remote-MSMQ-Dienst herstellen kann. An diesem Punkt fließt die Nachricht vom Client zum Endziel.
Es gibt mindestens eine Einschränkung: Wenn der Remoteserver zu lange offline ist (überprüfen Sie Ihre Dokumentation auf MSMQ), gibt der Client auf und verschiebt die Nachricht vom Postausgang in die Warteschlange für nicht zustellbare Nachrichten. In die Warteschlange für nicht zustellbare Nachrichten übertragene Nachrichten können nicht automatisch erneut gesendet werden, sondern müssen neu erstellt werden.
Wenn Sie eine Verschlüsselung benötigen und kein Active Directory haben, führt Sergey Sorokin in diesem Blogeintrag die Schritte auf, die zum Verschlüsseln der Kommunikation von MSMQ mit WCF ohne Active Directory erforderlich sind.
quelle
Sie sind keine 1: 1-Ersetzung - häufig verwenden Sie NServiceBus, um Nachrichten in einen WCF-Endpunkt einzugeben oder von diesem zu empfangen.
In solchen Szenarien im getrennten Modus leuchten die Nachrichtenwarteschlangen auf jeden Fall wirklich. NServiceBus ist ein guter Anfang. Es gibt eine Reihe anderer Optionen. Ich stelle fest, dass viele von ihnen MSMQ am Ende des Tages tatsächlich einbinden - MSMQ ist ein sehr solides Back-End und es lohnt sich wahrscheinlich, es zu verwenden, wenn es zugänglich gemacht wird.
quelle