2010-11-19 8 views
2

Ich entwickle ein paar Anwendungen für Embedded-Geräte; Sie sollten mit Windows CE 5.0 und XP, die mit C# 2.0 integriert wurden, kompatibel sein. Anwendungen sollten kleine Nachrichten austauschen, die normalerweise Ereignisse darstellen. Ich implementierte einen ersten Prototyp mit TCP-Sockets und einem separaten Server als Dispatcher (mit einem Pub/Sub-Muster). Es funktioniert, aber ich frage mich, ob die Verwendung von MSMQ eine bessere Lösung wäre. Persistente Nachrichten würden mir in einigen Szenarien helfen, aber im Allgemeinen sollten alle Ereignisse sofort von den Zielanwendungen konsumiert werden. Ich möchte Pro und Kontra für beide Lösungen und einige Richtlinien kennen, um mir bei der Entscheidung zu helfen.Eingebettete Systeme: Sockets vs MSMQ

Danke

Antwort

3

Nun, Message Queuing für die garantierte Zustellung über eine Transaktionswarteschlange ist groß. Das macht Ihr System widerstandsfähiger gegen Abstürze und unerwartete Neustarts. Dies funktioniert jedoch in der Regel nur, wenn Sie Ihre App von einem solchen Problem aus neu starten und den Status wiederherstellen können, bevor Sie erneut Nachrichten empfangen.

Das ist eine nicht-triviale Anforderung. Wenn Sie es nicht erreichen können, neigen statusbehaftete Nachrichten dazu, die Maschine wieder herunterzufahren. Es gibt fast immer einen expliziten Status in Nachrichten, selbst wenn ihr Inhalt nicht statusbehaftet ist, einfach durch die Reihenfolge, in der sie empfangen werden, und mutieren Ihren Programmstatus. Dies war der Fluch für Middleware, Software, die davon ausgeht, dass Netzwerk ein Implementierungsdetail ist, das abstrahiert werden kann, funktioniert in der Praxis nicht gut.

Ich dachte this answer bei SO drückte dieses Problem besonders gut aus.

2

Ich würde geneigt sein, eine Schnittstelle zu abstrahieren und sie beide basierend auf der Schnittstelle zu implementieren und die Entscheidung zu einem Konfigurationselement zu machen. Lassen Sie die Benutzer ein Protokoll basierend auf ihren sich potenziell ändernden Bedürfnissen wählen.