web-dev-qa-db-fra.com

À quoi sert Java Message Service (JMS)?

J'évalue actuellement JMS et je ne comprends pas pourquoi je pourrais l'utiliser.

Actuellement, je pense que ce serait un cas d'utilisation: je veux créer une facture de vente PDF et l'imprimer lorsqu'un SalesOrder quitte l'entrepôt, donc pendant la transaction de livraison, je pourrais envoyer une demande d'impression transactionnelle qui vient commence lorsque la transaction SalesOrder se termine avec succès.

Maintenant, j'ai découvert que la plupart des produits JMS sont des serveurs autonomes.

  • Pourquoi aurait-on besoin d'un serveur autonome pour le traitement des messages, par ex. un traitement inproc simple avec le planificateur Quartz?
  • Comment interagit-il avec mon application?
  • N'est-ce pas beaucoup trop lent?
  • Quels sont les cas d'utilisation que vous avez déjà mis en œuvre avec succès?
32
Daniel

JMS est un système incroyablement utile, mais pas pour tous les usages.

Il s'agit essentiellement d'un framework de haut niveau pour l'envoi de messages entre nœuds, avec des options de découverte, de robustesse, etc.

Un cas d'utilisation utile est lorsque vous voulez qu'un client et un serveur se parlent, mais sans que le client ait réellement l'adresse du serveur (par exemple, vous pouvez avoir plus d'un serveur). Le client n'a besoin que de connaître le courtier et le nom de la file d'attente/rubrique, et le serveur peut également se connecter.

JMS ajoute également de la robustesse. Par exemple, vous pouvez le configurer de sorte que si le serveur meurt pendant que le client envoie des messages ou l'inverse, vous pouvez toujours envoyer des messages du client ou interroger les messages du serveur. Si vous avez déjà essayé de l'implémenter directement avec des sockets - c'est un cauchemar.

Le scénario que vous décrivez ressemble à un problème J2EE classique, pourquoi n'utilisez-vous pas un framework J2EE? JMS est souvent utilisé dans J2EE pour les communications, mais vous avez tous les autres avantages.

44
Uri

À quoi sert Java Message Service (JMS) pour

JMS est un standard de messagerie qui permet aux applications Java EE de créer, envoyer, recevoir et consommer des messages de manière lâche couplée, fiable et asynchrone. Je suggère de lire Présentation de l'API Java Message Service pour plus de détails.

Pourquoi aurait-on besoin d'un serveur autonome pour le traitement des messages, par ex. un traitement inproc simple avec le planificateur Quartz?

Bien sûr, dans votre cas, le quartz est une option. Mais que faire si le système de facturation est un système distant? Et si vous ne voulez pas attendre la réponse? Que faire si le système distant est en panne lorsque vous souhaitez communiquer avec lui? Et si le réseau n'est pas toujours disponible? C'est là qu'intervient JMS. JMS permet d'envoyer un message dont la livraison est garantie et de le consommer de manière transactionnelle (l'envoi ou la consommation d'un message peut faire partie d'une transaction globale).

Comment interagit-il avec mon application?

JMS prend en charge deux modes de communication: point à point et publication/abonnement (si cela répond à la question).

N'est-ce pas beaucoup trop lent?

Les mamans avec qui je travaillais étaient extrêmement rapides.

Quels sont les cas d'utilisation que vous avez déjà mis en œuvre avec succès?

Utilisé dans des systèmes tels qu'une application de réservation, un back-office bancaire (traitement des données de marché), ou plus simplement pour envoyer des emails.

Voir également

17
Pascal Thivent

Pourquoi aurait-on besoin d'un serveur autonome pour le traitement des messages, par ex. un traitement inproc simple avec le planificateur Quartz?

La force de JMS réside dans le fait que vous pouvez avoir plusieurs producteurs et plusieurs consommateurs pour la même file d'attente, et le courtier JMS gère la charge.

Si vous avez plusieurs producteurs mais un consommateur unique , vous pouvez également utiliser d'autres approches, comme un planificateur de quartz et une table de base de données. Mais dès que vous avez plusieurs consommateurs, le schéma de verrouillage devient très difficile à concevoir; mieux vaut opter pour une solution de messagerie déjà approuvée. Voir ces autres réponses de ma part pour quelques détails supplémentaires: Pourquoi choisir JMS pour une solution asynchrone? et Système producteur/consommateur utilisant une base de données

Les autres points sont trop vagues pour qu'on y réponde.

5
ewernli

Je l'ai utilisé sur un certain nombre de projets. Il peut aider à l'évolutivité, au découplage des services et à la haute disponibilité. Voici une description de la façon dont je l'ai utilisé sur un projet il y a plusieurs années:

http://coders-log.blogspot.com/2008/12/favorite-projects-series-installment-2.html

La description explique ce que JMS a apporté à la table pour ce projet particulier, mais d'autres projets utiliseront des systèmes de messagerie pour diverses raisons.

3
Don Branson

De la Javadoc :

L'API Java Message Service (JMS) fournit un moyen courant pour les programmes Java) de créer, envoyer, recevoir et lire les messages d'un système de messagerie d'entreprise.

En d'autres termes, et contrairement à toutes les autres réponses ici, JMS n'est rien de plus qu'un API, qui wraps accès à des courtiers de messages tiers, via des "fournisseurs JMS" mis en œuvre par le fournisseur. Ces Message Brokers, comme IBM MQ et des dizaines d'autres, ont les caractéristiques de fiabilité, d'asynchronicité, etc. qui ont été mentionnées dans d'autres réponses. JMS lui-même n'en fournit aucun. C'est aux courtiers de messages ce que JDBC est aux bases de données SQL, ou JNDI aux serveurs LDAP (entre autres).

1
user207421

JMS est un middleware orienté message .

  • Pourquoi aurait-on besoin d'un serveur autonome pour le traitement des messages, par ex. un traitement inproc simple avec le planificateur Quartz?

Cela dépend des autres composants que vous pourriez avoir. J'imagine. Mais je ne sais rien du Quartz

  • Comment interagit-il avec mon application?

Vous envoyez des messages au courtier.

  • N'est-ce pas beaucoup trop lent?

Comparez à quoi?

  • Quels sont les cas d'utilisation que vous avez déjà mis en œuvre avec succès?

J'ai utilisé JMS pour implémenter un serveur d'applications SIP, pour communiquer entre les différents composants.

1
LB40

La messagerie est généralement utilisée pour interconnecter différents systèmes et envoyer des demandes/commandes de manière asynchrone. Un exemple courant est une application client bancaire demandant l'approbation d'une transaction. Le serveur est situé dans le système d'une autre banque. Les deux systèmes sont connectés dans un bus de service d'entreprise. La demande va dans le bus de messagerie, qui accuse instantanément réception du message. Le client peut poursuivre le traitement. Chaque fois que le système serveur devient disponible, le bus lui transmet le message. Bien sûr, il doit y avoir un deuxième chemin, pour que le serveur informe le client que la transaction a réussi ou échoué. Cela peut à nouveau être implémenté avec JMS.

Veuillez noter que les deux systèmes n'ont pas besoin d'implémenter JMS. L'un peut utiliser JMS et l'autre MSMQ. Le bus se chargera de l'interconnexion.

1
kgiannakakis

J'ai trouvé une très bonne explication de JMS avec un exemple.

Il s'agit d'une application de discussion simple avec des files d'attente JMS qui sont utilisées pour communiquer des messages entre les utilisateurs et les messages restent dans la file d'attente si le destinataire est hors ligne.

Dans cet exemple d'implémentation, ils ont utilisé

  • XSD pour générer des classes de domaine.
  • Eclipse EE comme IDE.
  • JBoss comme serveur web/d'application.
  • HTML/JavaScript/JQuery pour l'interface utilisateur.
  • Servlet comme contrôleur.
  • MySQL en tant que DB.

L'étape de configuration de JBoss pour la file d'attente est bien expliquée. Elle est disponible sur http://coder2design.com/messaging-service/

Même le code téléchargeable y est également disponible.

0
Jatinder Pal