Question

Nous examinions MSMQ pour les tentatives persistantes de & # 8216; push & # 8217; communication serveur à client. Il peut y avoir jusqu'à 1000 clients par serveur.

Lors de l'un de nos tests, nous avons envoyé un petit message à 300 clients hors ligne, puis un message à un client en ligne. Le dernier message a été retardé de plus de 40 minutes, MSMQ ayant effacé les messages non distribuables (observés via la MMC). Nous utilisons également MSMQ pour le chemin de retour où cela fonctionne bien.

Existe-t-il un moyen d’adapter MSMQ à ce modèle d’utilisation en réduisant le temps nécessaire pour se connecter à un hôte hors ligne? Sinon, y a-t-il un autre produit de file d'attente qui conviendrait mieux, ou est-ce votre propre temps? Le débit brut n’est pas une priorité, mais le nombre de files d’attente sortantes et la prévisibilité / latence maximale le sont, de même que l’empreinte mémoire des clients (qui peuvent être des machines assez anciennes).

Était-ce utile?

La solution 2

Notre solution consistait à suspendre par programmation les files d’attente des machines hors ligne (nous avions déjà un message UDP indiquant si les clients sont actifs) via l’une des interfaces COM de gestion de MSMQ.

Avec les files d'attente d'hôte déconnectés connus, MSMQ a passé beaucoup moins de temps à traiter les messages non distribuables.

C’était aussi une bonne leçon d’appliquer un peu de pensée latérale lors de la conception de tests d’évaluation des technologies! En général, je ne recommanderais pas MSMQ pour les communications serveur à client à cause de ce problème - je dirais que l'interrogation par les clients serait préférable.

Autres conseils

Vous pouvez augmenter les performances en désactivant la journalisation et en rendant les messages irrécupérables ... si vous ne vous souciez pas de la perte des messages.

Une solution rapide à votre scénario hors ligne pourrait consister à augmenter le nombre de threads disponibles pour MSMQ qui utilise un thread par file d'attente sortante. Chaque tentative de connexion hors ligne prend un certain temps, bloquant un thread. http://technet.microsoft.com/en-us/library/cc957498.aspx Essayez de lancer le plus de discussions possible.

Mes collègues ont travaillé avec ActiveMQ et ont dit que c'était beaucoup plus flexible tout en offrant de meilleures performances. Je n'ai pas personnellement travaillé avec cela, mais j'examinerais si je ne suis pas lié à .Net.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top