187 votes

Utilisation réelle de JMS/files de messages ?

J'ai lu quelques articles sur JMS et Apache ActiveMQ. Je me demandais à quoi servait JMS ou d'autres technologies similaires de file d'attente de messages dans le monde réel ?

197voto

Jon Points 23749

JMS (ActiveMQ est une implémentation du courtier JMS) peut être utilisé comme mécanisme pour permettre le traitement asynchrone des demandes. Vous pouvez souhaiter le faire parce que la demande prend beaucoup de temps à se réaliser ou parce que plusieurs parties peuvent être intéressées par la demande elle-même. Une autre raison de l'utiliser est de permettre à plusieurs clients (potentiellement écrits dans des langues différentes) d'accéder aux informations via JMS. ActiveMQ est un bon exemple ici car vous pouvez utiliser le protocole STOMP pour permettre l'accès à partir d'un client C#/Java/Ruby.

Un exemple concret est celui d'une application web utilisée pour passer une commande pour un client particulier. Dans le cadre de la passation de cette commande (et de son stockage dans une base de données), vous pouvez souhaiter effectuer un certain nombre de tâches supplémentaires :

  • Stocker la commande dans une sorte de système dorsal tiers (tel que SAP).
  • Envoyer un courriel au client pour l'informer que sa commande a été passée.

Pour ce faire, le code de votre application doit publier un message sur une file d'attente JMS qui comprend un identifiant de commande. Une partie de votre application qui écoute la file d'attente peut répondre à l'événement en prenant l'ID de commande, en recherchant la commande dans la base de données, puis en plaçant cette commande auprès d'un autre système tiers. Une autre partie de votre application peut être chargée de prendre l'identifiant de la commande et d'envoyer un courriel de confirmation au client.

99voto

duffymo Points 188155

Utilisez-les en permanence pour traiter des opérations de longue durée de manière asynchrone. Un internaute ne voudra pas attendre plus de 5 secondes le traitement d'une requête. Si vous avez une demande qui dure plus longtemps que cela, une solution consiste à soumettre la demande à une file d'attente et à renvoyer immédiatement une URL que l'utilisateur peut vérifier pour savoir quand le travail est terminé.

Publish/subscribe est une autre bonne technique pour découpler les expéditeurs de nombreux récepteurs. Il s'agit d'une architecture flexible, car les abonnés peuvent aller et venir selon les besoins.

76voto

mikesomeone Points 361

J'ai eu tellement d'utilisations étonnantes de JMS :

  • Communication par chat Web pour le service clientèle.

  • Journalisation de débogage sur le backend. Tous les serveurs d'applications diffusent des messages de débogage à différents niveaux. Un client JMS pouvait alors être lancé pour surveiller les messages de débogage. Bien sûr, j'aurais pu utiliser quelque chose comme syslog, mais cela m'a donné toutes sortes de façons de filtrer la sortie sur la base d'informations contextuelles (par exemple par nom de serveur d'application, appel api, niveau de log, userid, type de message, etc...). J'ai également colorisé la sortie.

  • Enregistrement de débogage dans un fichier. Comme ci-dessus, seuls des éléments spécifiques ont été extraits en utilisant des filtres, et enregistrés dans un fichier pour la journalisation générale.

  • Alerte. Il s'agit là encore d'une configuration similaire à celle de l'enregistrement ci-dessus, qui consiste à rechercher des erreurs spécifiques et à alerter les personnes concernées par divers moyens (courrier électronique, message texte, messagerie instantanée, pop-up Growl...).

  • Configurer et contrôler dynamiquement les grappes de logiciels. Chaque serveur d'applications diffuse un message "configurez-moi", puis un démon de configuration répond par un message contenant toutes sortes d'informations de configuration. Plus tard, si tous les serveurs d'applications avaient besoin de changer leur configuration en même temps, cela pourrait être fait à partir du démon de configuration.

  • Et l'habituel - les transactions en file d'attente pour les activités retardées telles que la facturation, le traitement des commandes, l'approvisionnement, la génération d'e-mails...

Il est idéal partout où vous voulez garantir la livraison de messages de manière asynchrone.

19voto

pugmarx Points 1956

Calcul distribué (a)synchrone.
Un exemple concret pourrait être un cadre de notification à l'échelle de l'application, qui envoie des courriers électroniques aux parties prenantes à différents moments de l'utilisation de l'application. Ainsi, l'application agirait comme un Producer en créant un Message en le plaçant sur un objet particulier Queue et aller de l'avant.
Il y aurait un ensemble de Consumer qui s'abonneraient au Queue en question, et s'occuperait de traiter le Message envoyé à travers. Notez qu'au cours de cette transaction, les Producer sont découplés de la logique de la manière dont un projet de Message seraient traitées.
Les cadres de messagerie (ActiveMQ et autres) servent d'épine dorsale pour faciliter ce type de travail. Message les transactions en fournissant MessageBroker s.

10voto

RichardOD Points 19942

Je l'ai utilisé pour envoyer des transactions intrajournalières entre différents systèmes de gestion de fonds. Si vous souhaitez en savoir plus sur cette formidable technologie qu'est la messagerie, je vous recommande vivement le livre " Modèles d'intégration d'entreprise ". Il existe quelques exemples de JMS pour des choses comme demander/répondre et publier/s'abonner.

La messagerie est un excellent outil d'intégration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X