Nous avons un serveur central qui envoie et reçoit des messages d'un certain nombre de PC situés sur des réseaux clients à différents endroits. Pour faciliter cela, j'utilise actuellement WCF avec TCPNetBindings, en utilisant une communication duplex sécurisée avec des certificats.
Maintenant, nous avons un certain nombre de problèmes avec cela - principalement qu'on nous demande de prendre en charge le "mode déconnecté" (nous devons être tolérants aux pannes). D'après ce que je sais, il n'y a pas de moyen simple de le faire en utilisant la pile WCF - nous aurions besoin d'implémenter quelque chose et peut-être d'utiliser msmq. J'ai récemment regardé NServiceBus, et d'après ce que je peux voir, cela semble bien convenir - tolérance aux pannes, les messages peuvent être envoyés sur Internet via une simple passerelle http, etc. Je sais qu'il est bien respecté dans la communauté, et Je peux voir pourquoi en y regardant.
Donc, ma question est ... L'emploi de NServiceBus semble-t-il une idée sensée, ou quelqu'un a-t-il d'autres suggestions / une expérience du monde réel qui s'y rapportent? Je suppose que je suis inquiet d'introduire une nouvelle technologie que je connais relativement peu et de faire face à des problèmes tels que la sécuriser, tout configurer de manière fiable, se tromper en cours de route .. Je me méfie également de "l'or- plaquant "l'architecture, et choisissant quelque chose de brillant qui finira par m'embourber dans l'implémentation par rapport à s'en tenir à WCF et à le faire fonctionner pour moi ..
Merci!
la source
Réponses:
Ma suggestion, si vous avez besoin d'être rapide à ce sujet et que vous n'avez besoin que de quelque chose de simple pour faciliter un fonctionnement durable (déconnecté) avec WCF, est de regarder dans les liaisons WCF - MSMQ. Si vous avez besoin de quelque chose dans un environnement plus large, regardez nServiceBus.
Dans mon esprit, nServiceBus commencerait vraiment à briller dans un environnement distribué plus large. Prenons, par exemple, l'exemple suivant (ce serait l'enfer sur terre avec WCF mais simple avec nServiceBus):
WCF a des liaisons MSMQ
Cependant, si vous devez principalement rester avec WCF (délais courts, besoin d'autres fonctionnalités WCF), je vous suggère de consulter cet article sur MSDN. Il vous montre comment utiliser les liaisons WCF pour MSMQ, puis vous montre comment migrer un service de HTTP vers MSMQ. En cours de route, il vous montre certains des problèmes de ce scénario (et des solutions utiles à ces problèmes).
Ces deux suggestions font un usage intensif de MSMQ, donc une note à ce sujet: contrairement à Apache MQ, RabbitMQ et à d'autres systèmes de files d'attente populaires, MSMQ n'est pas une architecture de file d'attente basée sur un courtier typique, c'est plutôt une file d'attente distribuée. Cela signifie que si votre client WCF envoie un message via un transport MSMQ alors qu'il ne peut pas se connecter au serveur distant qui héberge la file d'attente, la machine cliente mettra en file d'attente le message dans ce qui est appelé une «file d'attente sortante» localement à la place. Le message y restera en sécurité jusqu'à ce que le service MSMQ du client détecte qu'il peut se reconnecter au service MSMQ distant. À ce stade, le message circulera du client vers la destination finale.
Il y a au moins une mise en garde à ce qui précède - si le serveur distant est hors ligne pendant trop longtemps (consultez votre documentation pour MSMQ), le client abandonnera et déplacera le message de sortant vers la file d'attente de lettres mortes. Les messages transférés dans la file d'attente de lettres mortes ne peuvent pas être renvoyés automatiquement, ils doivent être reconstruits.
Si vous avez besoin d'un chiffrement et que vous n'avez pas ActiveDirectory, sur cette entrée de blog , Sergey Sorokin détaille les étapes nécessaires pour chiffrer la communication de MSMQ à l'aide de WCF sans Active Directory.
la source
Ils ne sont pas un remplacement 1 pour 1 - plusieurs fois, vous utiliserez NServiceBus pour alimenter ou prendre des messages à partir d'un point de terminaison WCF.
Dans tous les cas, la gestion de scénarios en mode déconnecté comme celui-ci est vraiment très intéressante. NServiceBus est un bon point de départ. Il existe un certain nombre d'autres options. Je noterai que beaucoup d'entre eux enveloppent MSMQ à la fin de la journée - MSMQ est un back-end très solide et vaut probablement la peine d'être utilisé lorsqu'il est rendu accessible.
la source