Utilisation réelle de JMS / files d'attente de messages? [fermé]

182

Je lisais juste un peu sur JMS et Apache ActiveMQ. Et vous vous demandiez à quoi servent dans le monde réel les gens d'ici ont utilisé JMS ou des technologies de file d'attente de messages similaires?

nos
la source

Réponses:

191

JMS (ActiveMQ est une implémentation de courtier JMS) peut être utilisé comme mécanisme pour permettre le traitement asynchrone des requêtes. Vous souhaiterez peut-être faire cela parce que la demande prend beaucoup de temps ou parce que plusieurs parties peuvent être intéressées par la demande réelle. Une autre raison de l'utiliser est de permettre à plusieurs clients (potentiellement écrits dans différentes langues) d'accéder aux informations via JMS. ActiveMQ est un bon exemple ici car vous pouvez utiliser le protocole STOMP pour autoriser 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 souhaiterez peut-être effectuer un certain nombre de tâches supplémentaires:

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

Pour ce faire, votre code d'application publiera un message dans une file d'attente JMS qui comprend un identifiant de commande. Une partie de votre application écoutant la file d'attente peut répondre à l'événement en prenant le orderId, en recherchant la commande dans la base de données, puis en passant cette commande auprès d'un autre système tiers. Une autre partie de votre candidature peut être chargée de prendre le orderId et d'envoyer un e-mail de confirmation au client.

Jon
la source
Salut @jon, avez-vous vu cette balise Documentation? stackoverflow.com/documentation/jms/commit ils ont juste besoin d'un support de committer pour activer le sujet, je pense que vous pourriez être celui :) qui leur permet de nous donner des documents impressionnants sur JMS
juanmf
@Jon si je comprends bien, jms est lui-même une implémentation du modèle d'intégration d'entreprise?
valik
Non, Mule ou Camel serait ...
Jon
1
Si un certain nombre d'applications peuvent consommer les messages de la file d'attente, comment la file d'attente sait-elle quand supprimer les anciens messages?
Basil Bourque
95

Utilisez-les tout le temps pour traiter les opérations de longue durée de manière asynchrone. Un utilisateur Web ne voudra pas attendre plus de 5 secondes pour qu'une demande soit traitée. Si vous en avez une qui dure plus longtemps, une conception consiste à soumettre la demande à une file d'attente et à renvoyer immédiatement une URL que l'utilisateur peut vérifier pour voir quand le travail est terminé.

La publication / abonnement est une autre bonne technique pour découpler les expéditeurs de nombreux destinataires. C'est une architecture flexible, car les abonnés peuvent aller et venir au besoin.

duffymo
la source
41
Après avoir lu votre réponse, je vais ajouter JMS à ma file d'attente «Ce que je vais apprendre cette année» :)
Roman
De nos jours, au lieu d'utiliser les spécifications JMS, nous pouvons utiliser des appels de méthode asynchrones. Pour plus d'informations, voir: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo
3
Ce ne sont pas tout à fait les mêmes. Il n'y a pas de livraison garantie avec un appel de méthode asynchrone; aucune notion de sujets que l'on peut envoyer à plusieurs auditeurs à la fois.
duffymo
75

J'ai eu tellement d'utilisations incroyables pour JMS:

  • Communication par chat Web pour le service client.

  • Journalisation du débogage sur le backend. Tous les serveurs d'applications diffusaient des messages de débogage à différents niveaux. Un client JMS pourrait 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 en fonction des informations contextuelles (eq par nom de serveur d'application, appel api, niveau de journal, ID utilisateur, type de message, etc.). J'ai également colorisé la sortie.

  • Journalisation du débogage dans un fichier. Comme ci-dessus, seuls des éléments spécifiques ont été extraits à l'aide de filtres et enregistrés dans un fichier pour une journalisation générale.

  • Alerte. Encore une fois, une configuration similaire à la journalisation ci-dessus, en surveillant les erreurs spécifiques et en alertant les gens via divers moyens (e-mail, SMS, messagerie instantanée, pop-up Growl ...)

  • Configuration et contrôle dynamiques des clusters de logiciels. Chaque serveur d'application diffusait un message "configurez-moi", puis un démon de configuration qui répondrait par un message contenant toutes sortes d'informations de configuration. Plus tard, si tous les serveurs d'applications devaient changer leurs configurations en même temps, cela pourrait être fait à partir du démon de configuration.

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

C'est génial partout où vous souhaitez garantir la livraison des messages de manière asynchrone.

mikesomeone
la source
5
Il ne me semble pas juste d'utiliser JMS pour la journalisation du débogage. Les files d'attente et la messagerie ont un coût important et la journalisation (pour un débogage qui enregistre généralement beaucoup) doit être aussi rapide que possible.
Marco Altieri
19

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 au cours de l'utilisation de l'application. Ainsi, l'application agirait comme un Produceren créant un Messageobjet, en le plaçant sur un particulier Queueet en avançant.
Il y aurait un ensemble de Consumers qui souscriraient à la Queuequestion et prendraient soin de gérer l' Messageenvoi. Notez qu'au cours de cette transaction, les Producers sont découplés de la logique de Messagetraitement d' un donné .
Les cadres de messagerie (ActiveMQ et autres) agissent comme une épine dorsale pour faciliter de telles Messagetransactions en fournissant MessageBrokers.

pugmarx
la source
Je souhaite un traitement asynchrone car RestService Api est synchrone. Comment le faire avec ActiveMq et Jms. Veuillez nous aider à ce sujet. stackoverflow.com/questions/19706788/… . Merci pour votre aide et votre temps
Kumar
10

Je l'ai utilisé pour envoyer des transactions intrajournalières entre différents systèmes de gestion de fonds. Si vous voulez en savoir plus sur ce qu'est une excellente messagerie technologique, je vous recommande vivement le livre " Enterprise Integration Patterns ". Il existe quelques exemples JMS pour des choses comme la demande / réponse et la publication / abonnement.

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

RichardOD
la source
8

Nous l'utilisons pour lancer un traitement asynchrone que nous ne voulons pas interrompre ou entrer en conflit avec une transaction existante.

Par exemple, disons que vous avez une logique coûteuse et très importante comme «acheter des choses», une partie importante de l'achat de choses serait «notifier le magasin de choses». Nous rendons l'appel de notification asynchrone afin que la logique / le traitement impliqué dans l'appel de notification ne bloque pas ou n'entre pas en conflit avec les ressources avec la logique métier d'achat. Résultat final, l'achat est terminé, l'utilisateur est satisfait, nous recevons notre argent et comme la file d'attente est garantie, le magasin est averti dès son ouverture ou dès qu'il y a un nouvel article dans la file d'attente.

Kevin Williams
la source
1
Veuillez aider à ce sujet. stackoverflow.com/questions/19706788/… . Merci pour votre aide et votre temps.
Kumar
2
Mais parce que la demande est asynchrone, en raison d'un problème de réseau, votre message risque de ne pas être envoyé. Et ça? Lorsque vous voulez acheter des choses, votre nitification doit être envoyée. N'est ce pas?
grep
8

Je l'ai utilisé pour mon projet académique qui était un site Web de vente au détail en ligne similaire à Amazon. JMS a été utilisé pour gérer les fonctionnalités suivantes:

  1. Mettez à jour la position des commandes passées par les clients, au fur et à mesure que l'envoi se déplace d'un endroit à un autre. Cela a été fait en envoyant en continu des messages à JMS Queue.
  2. Alerter sur tout événement inhabituel tel que l'envoi retardé, puis envoyer un e-mail au client.
  3. Si la livraison atteint sa destination, envoi d'un événement de livraison.

Nous avions plusieurs clients distants également implémentés connectés au serveur principal. Si la connexion est disponible, ils utilisent pour accéder à la base de données principale ou sinon utiliser leur propre base de données. Afin de gérer la cohérence des données, nous avons implémenté le mécanisme 2PC. Pour cela, nous avons utilisé JMS pour échanger les messages entre ces systèmes c'est-à-dire l'un agissant en tant que coordinateur qui lancera le processus en envoyant un message sur la file d'attente et les autres répondront en conséquence en renvoyant un message sur la file d'attente. Comme d'autres l'ont déjà mentionné, c'était similaire au modèle pub / sous.

qwerty
la source
6

J'ai vu JMS utilisé dans différents projets commerciaux et académiques. JMS peut facilement entrer dans votre image, chaque fois que vous souhaitez avoir des systèmes distribués totalement découplés. De manière générale, lorsque vous devez envoyer votre demande à partir d'un nœud et que quelqu'un de votre réseau s'en charge sans / avec donner à l'expéditeur des informations sur le destinataire.

Dans mon cas, j'ai utilisé JMS pour développer un middleware orienté message (MOM) dans ma thèse, où des types spécifiques d'objets orientés objet sont générés d'un côté en tant que votre demande, et compilés et exécutés de l'autre côté en tant que réponse .

paradisonoir
la source
6

Apache Camel utilisé en conjonction avec ActiveMQ est un excellent moyen de créer des modèles d'intégration d'entreprise

Rob Davies
la source
5

Nous avons utilisé la messagerie pour générer des devis en ligne

bluegene
la source
4

Nous utilisons JMS pour communiquer avec les systèmes d'un grand nombre de sites distants sur des réseaux peu fiables. Le couplage lâche en combinaison avec une messagerie fiable produit un paysage système stable: chaque message sera envoyé dès que cela sera techniquement possible, des problèmes plus importants dans le réseau n'auront pas d'influence sur l'ensemble du paysage système ...

roundrobin
la source