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 ?
Réponses
Trop de publicités?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.
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.
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.
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.
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.