Bonne stratégie pour Message Queuing?

voix
9

Je conçois actuellement une application que je veux finalement passer à Windows Azure. À court terme, cependant, il sera en cours d'exécution sur un serveur que je me héberger.

L'application implique un certain nombre d'applications Web distinctes - certains d'entre eux sont essentiellement des services WCF qui reçoivent des données, et certains sont des sites pour les utilisateurs de gérer les données. De plus, il y aura besoin d'être un service des travailleurs en cours d'exécution en arrière-plan qui traitera les données de diverses façons.

Je suis très désireux d'utiliser une architecture découplée pour cela. Idéalement je vouloir les composants (c.-à-applications Web et services des travailleurs) de savoir aussi peu que possible les uns des autres. Il semble que l'aide d'une file d'attente de messages sera la meilleure solution ici - les applications Web peuvent enqueue messages avec des unités de travail dans la file d'attente et le service des travailleurs peut les repérer et de les traiter au besoin.

Cependant, je veux travailler un bon ensemble de technologies pour ce faire, en gardant à l'esprit que je vais finalement déménager dans Azure et que vous voulez réduire la quantité de re-travail que je vais devoir faire quand je migrer vers le nuage . Azure a une composante de file d'attente construit qui semble idéal pour mes besoins. Ce que je voudrais faire est de créer quelque chose de moi-même qui imiter ce aussi près que possible.

On dirait qu'il ya plusieurs options (j'utilise .NET sous Windows, avec une extrémité arrière SQL Server 2005) - ceux que j'ai trouvé à ce jour sont:

  • MSMQ
  • courtier de SQL Server
  • Rouler mon aide d'une table de base de données et des procédures stockées

Je me demandais si quelqu'un a des suggestions pour cela - ou si quelqu'un a fait quelque chose de semblable et a des conseils sur les choses à faire / à éviter. Je me rends compte que chaque situation est différente, mais dans ce cas, je pense que mes exigences de mise en attente sont assez génériques, donc j'aimerais entendre les pensées de quelqu'un d'autre sur la meilleure façon de le faire.

Merci d'avance,

John

Créé 27/08/2009 à 00:55
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
18

Si vous avez Azure à l'esprit, peut-être vous devriez commencer à droite sur Azure comme les API et semnatics sont significativement différentes entre les files d'attente Azure et l'une des MSMQ ou SSB.

Une comparaison de 3048 mètres rapide de MSMQ vs SSB (je vous laisse une coutume table en file d'attente de comparaison car cela dépend vraiment comment vous le mettre en œuvre ...)

  • Déploiement : MSMQ est un composant Windows, SSB est une compoenent SQL. SSB nécessite une instance SQL pour stocker tout message, les clients afin disconencted doivent avoir accès à une instance (peut être Express). MSMQ nécessite le déploiement de MSMQ sur le client (partie du système d' exploitation, mais en option d' installation).
  • Programmabilité : MSMQ offre une à part entière, pris en charge, canal WCF. SSB offre seulement un canal WCF expérimental à http://ssbwcf.codeplex.com
  • Performance : SSB sera nettement plus rapide que MSMQ en mode traité. MSMQ sera plus rapide si fonctionner en mode laisser untransacted (meilleur effort, non ordonné, livraison)
  • Queriability : les files d' attente SSB peuvent être uppon SELECTE-ed (voir tout message, plein JOIN SQL / OU / puissance COMMANDE / GROUPE), les files d' attente MSMQ peut être jeté un œil (seul message suivant)
  • Recouvrabilité : les files d' attente de SSB sont intégrées dans la base de données afin qu'ils soient sauvegardés et restaurés avec la base de données, en gardant un état consitent avec l'état de l' application. Les files d' attente MSMQ sont sauvegardés dans le sous - système de sauvegarde de fichiers NT, afin de garder la sauvegarde synchronisée (cohérente) la file d' attente et la base de données doivent être suspendues.
  • Transactions (puisque chaque enqueue / dequeue est toujours accompagnée d'une mise à jour de base de données): SSB est entièrement intégrée dans SQL si dequeueing et enqueueing sont des opérations de transactions locales. MSMQ est un TM séparé (Transaction Manager) afin file d' attente / dequeue doit être une opération de transaction distribuée à la fois SQL et inscrire MSMQ dans la transaction.
  • Gestion et suivi : les deux equaly mauvais. Aucun outil que ce soit.
  • Corrélativement Messages traitement: SSB peut bloquer le traitement des messages en corrélation par des fils concurent via haut- groupe de conversation de verrouillage .
  • Event Driven : SSB a activation pour lancer des procédures stockées, MSMQ utilise l' activation de Windows service. Similaire. SSB a bien l' auto charge capalities équilibre en raison de la façon WAITFOR (Receive) et MAX_QUEUE_READERS interagissent.
  • Disponibilité : SSB sur l'histoire se greffe à haute disponibilité SQL Server, il peut travailler dans un environnement miroring ou en cluster dans la base de données. MSMQ monte seulement l'histoire de clustering de Windows. Database Mirroring est beaucoup moins cher que le regroupement en tant que solution HA.

En outre , je voudrais ajouter que SSB et MSMQ diffèrent sensiblement au niveau DELA ils offrent primitive: SSB primitive est une conversation , alors que est un MSMQ primitif un message . Pensez TCP par rapport à la sémantique UDP.

Créé 27/08/2009 à 01:27
source utilisateur

voix
10

Choisissez une file d'attente arrière qui fonctionne pour vous, ou mieux adapté à votre environnement. @Remus a donné une grande comparaison entre MSMQ et SSB. MSMQ va être celui plus facile à mettre en œuvre, mais a quelques limitations notables, alors que SSB va se sentir très lourd comme à l'autre bout du spectre.

Have It Your Way
Pour réduire le réusinage de vous les applications, les files d' attente abstraites accès derrière une interface, puis fournir une implémentation pour le transport de file d'attente , vous décidez finalement d'aller avec. Quand il est temps de passer à Azure, ou un autre transport de file d'attente, vous fournissez simplement une nouvelle implémentation de l' interface.

Vous obtenez de contrôler la sémantique de la façon dont vous voulez interagir avec la file d'attente pour donner une API utilisable cohérente à partir de vos applications.

peut-être une idée approximative:

interface IQueuedTransport
{
  void SendMessage(XmlDocument);
  XmlDocument ReceiveMessage();
}

public class MSMQTransport : IQueuedTransport {}
public class AzureQueueTransport : IQueuedTransport {}

Vous ne pouvez pas bâtirez le be-tous les transports en file d'attente, tout ce qui répond à vos besoins. Si vous travaillez avec Xml, passer xml. Si vous travaillez dans des tableaux d'octets, passer des tableaux d'octets. :)

Bonne chance!
Z

Créé 27/08/2009 à 02:13
source utilisateur

voix
0

Utilisez Win32 Mailslots . Ils seront fiables sur un seul serveur, sont faciles à implémenter, et ne nécessitent aucun logiciel supplémentaire.

Créé 03/03/2011 à 00:28
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more