Question

Quelles sont les motivations pour utiliser un système de message?

Je vois beaucoup de choses sur les bus de services, tels que NServiceBus et Mass Transit et je me demande quels sont les avantages de la méthodologie sous-jacente sont.

Était-ce utile?

La solution

Il y a plusieurs avantages à l'utilisation de systèmes à base de messages.

  1. Messages forment une interface neutre de la technologie bien définie entre les applications.
  2. Permet le couplage lâche des applications.
  3. Beaucoup d'options de performance, réglage et mise à l'échelle:
    • Déploiement demandeur et processus de service sur un matériel différent
    • Plusieurs partage unique demandeurs serveur
    • Plusieurs partage plusieurs demandeurs serveurs
  4. Les différents intergiciels de messagerie mettre en œuvre les modèles de messagerie communs indépendamment de votre application.
    • demande / réponse
    • fire and forget les mises à jour hors ligne
    • Publier / Souscrire
  5. Un grand nombre des produits middleware poignée transformation de message (par exemple SWIFT à SWIFTXML).
  6. Un grand nombre des produits middleware peut décomposer une seule grande demande en plusieurs demandes plus petites.
  7. ils sont presque prennent en charge toutes les plates-formes multiples.

Incidemment les deux leaders du marché dans ce domaine sont IBM avec leurs produits Websphere MQ et connexes, et, TIBCO avec leur Enterprise Service Bus.

Autres conseils

producteurs et consommateurs un message fondé sur l'architecture de-couples de messages, à la fois dans le temps et dans l'espace. Cela a beaucoup d'avantages:

  • les producteurs et les consommateurs peuvent fonctionner sur des machines différentes
  • les producteurs et les consommateurs peuvent fonctionner à des moments différents.
  • les producteurs et les consommateurs peuvent fonctionner sur différentes plates-formes matérielles / logicielles (ils ne doivent comprendre le même protocole de message)
  • il est facile de coordonner plusieurs producteurs / consommateurs (par exemple pour les travaux de calcul intensif qui ont besoin de plusieurs machines, comme Dave Markle a décrit)
  • une plus grande stabilité lorsque les services sont temporairement unavailble (par exemple lorsque vous faites le traitement des commandes, en utilisant un système de messagerie peut aider à éviter « laisser tomber » commandes)

Vous perdez la plupart de ces avantages lorsque vous faites de converser en mode RPC (à savoir quand vous bloquer en attendant les réponses de service)

Un cas d'utilisation est quand vous avez un pool de ressources qui peuvent travailler sur un élément donné, et une liste des travaux qui doit être distribué de manière évolutive.

J'ai eu un projet où je devais faire l'intégration mainframe avec un certain nombre de 3270 screen scrapers (tout lent). Je pourrais avoir au plus 10 de ces processus ouverts sur une fenêtre à la fois. J'ai eu des milliers de comptes à écran éraflure et mise à jour, donc je mettre le travail dans une file d'attente, et mes machines (j'avais sur 3 em) vient de ramasser des objets de travail hors de la file d'attente de messages (MSMQ) et ne leur racler écran, et qui était. Je pourrais facilement une nouvelle spin up machine ou désactiver les anciens sans interrompre le flux de travail, ce qui était agréable.

les avantages sont vraiment à découpler les parties de votre application. Une fois que vous avez le bus mis en place, vous pouvez facilement étendre et applications sont ajoutées votre application en ajoutant de nouveaux morceaux que vous pouvez garantir n'affectera pas les autres parties. C'est un très bon moyen d'ajouter sans cesse à un système au fil du temps.

par exemple. nous avons un système comme celui-ci, chaque commande est mis en œuvre en tant que partie à l'interface graphique d'ensemble, si nous voulons ajouter une nouvelle fonctionnalité, ou de modifier un existant, nous écrivons simplement une nouvelle partie et l'ajouter au système. Quand il est appelé, il n'a aucune dépendance sur le reste. Cela signifie que nous pouvons étendre notre application très facilement. De plus, nous avons un message qui passe entre les nœuds sur notre réseau - quand quelque chose se change en 1 ordinateur, un message est envoyé à tous les autres afin qu'ils puissent se mettre à jour. Nous avons une centaine de messages différents pour des événements différents, afin que nous puissions étendre le système en laissant tomber un nouveau service qui réagit aux messages appropriés.

architectures de passage de messages ont généralement les mêmes caractéristiques que les services Web, vous avez des services discrets que vous pouvez appeler, vous pouvez ajouter de nouveaux facilement.

(! Et cher)

Ne pensez pas que ce message architectures nécessitent le passage de fantaisie produits middleware si, Windows fonctionne sur l'architecture d'un message qui passe - chaque WM_ * message transmis à une fenêtre est .. bien, un message, et je pense que montre le meilleur exemple de l'architecture - aucune partie d'un système a besoin de connaître toute autre partie, vous pouvez l'étendre à l'infini que vous pouvez gérer autant de contrôles que vous le souhaitez sur une boîte de dialogue, etc etc

.

passage du message est une architecture fabuleuse, mais il peut être plus lent que le couplage bien votre application ensemble, ce n'est pas beaucoup plus d'une raison de ne pas l'utiliser de nos jours, surtout si vous utilisez déjà des applications de script ou .net.

système orienté message sont généralement bonnes pour certaines catégories de problèmes d'intégration. D'autres alternatives ont un magasin de données partagées (fichier ou base de données en fonction peut-être) pour les applications de communiquer avec des applications intégrant ou via RPC.

Les avantages de la messagerie sur ces modèles d'intégration sont que vous n'êtes pas couplage des applications au même schéma de stockage de données et vous n'êtes pas lacer applications à un point à un scénario d'intégration RPC (qui devient plus complexe plus d'applications sont impliqués).

Il y a aussi les avantages de la communication asynchrone (comme le courrier électronique vs chat en ligne) et le routage des messages et des possibilités de transformation.

J'ai aidé à développer un pour un système qui utilise C # et Remoting, le client (un service ou GUI) peut envoyer un message avec des données personnalisées et le destinataire (s) recevrait, que ce soit quand ils suivant connectés ou instantanément ). Ils pourraient ensuite traiter le message (en prenant ownerships de celui-ci dans le cas des services d'équilibrage de charge). Il a également été utilisé pour mettre à jour lorsque de longues GUIs processus en cours avaient terminé.

Le système de messagerie lui-même avait des pipelines configurables qui ont traité chaque message, voici quelques exemples de quelques-unes des pipelines que nous avons développés:

  • Stockage (créé / enregistré le message à la base de données)
  • Routing (élaboré où doit être envoyé le message)
  • Sécurité (a travaillé si le client a été autorisé à le recevoir)
  • Supprimer (fonctionne si le message doit être supprimé du système, ce qui signifie que les clients doivent être notifiés et le message supprimé de son cache et battant pavillon dans le DB).
  • TakeOwnership (traite en veillant à un seul client peut modifier l'état d'un message à un moment que seuls les messages qui sont la propriété peut être modifiée)

Donc, en réponse à votre question, les systèmes de messagerie sont un moyen brillant d'envoyer des informations sur le moment où vous ne connaissez pas ou de soins du client qui est.

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