Développement d'applications MQ JMS sur Spring Boot



Les développeurs Java, lorsqu'ils utilisent l'interface JMS, préfèrent souvent travailler avec Spring Framework. Spring peut simplifier le codage de nouvelles applications en fournissant des modèles pour les modèles courants et a été utilisé avec succès pendant de nombreuses années avec les classes MQ JMS. La classe Spring JmsTemplate est une interface clé, mais elle dépend toujours des configurations et des dépendances dans le code.

Le framework Spring comprend différents modules pour différents besoins. Un tel composant est Spring Boot. Les démarreurs Spring Boot récupèrent toutes les dépendances et bibliothèques de configuration automatique nécessaires pour utiliser une technologie particulière. Cela permet de démarrer très facilement avec une nouvelle application et technologie, plus rapidement que de travailler directement avec des classes telles que JmsTemplate. Alors, comment pouvons-nous profiter de cet accès facile pour les applications MQ?

Traduit par @middle_java

Mark e taylor
Publié le 04/03/2018 / Mis à jour le 12/06/2018
11 commentaires

Dans cet article, j'ai décrit comment télécharger directement des classes MQ à partir de Maven Central Repository Java. Et maintenant, nous allons l'utiliser pour créer le Spring Boot Starter pour MQ . Vous pouvez télécharger le code source complet du module depuis GitHub .

Prise en main de MQ Spring Boot


Tout d'abord, nous avons besoin d'un gestionnaire de files d'attente en cours d'exécution. Nous allons ensuite créer une application qui accède à ce gestionnaire de files d'attente.

Démarrage d'un gestionnaire de files d'attente dans un conteneur


Pour commencer rapidement, vous pouvez utiliser le conteneur IBM MQ pour les développeurs , qui exécute les processus serveur. Lorsque ce conteneur est lancé, plusieurs objets sont créés par défaut et leurs définitions sont connues du module d'auto-configuration. Les valeurs par défaut correspondent aux valeurs requises par le gestionnaire de files d'attente de conteneurs.

Cela signifie que vous pouvez démarrer le gestionnaire de files d'attente à l'aide de l'environnement Docker et vous y connecter sans paramètres supplémentaires. Vous pouvez démarrer le conteneur sous Linux à l'aide de la commande suivante:

docker run --env LICENSE=accept --env MQ_QMGR_NAME=QM1 \ --publish 1414:1414 \ --publish 9443:9443 \ --detach \ ibmcom/mq 

Exemple d'application


Il utilise une approche cohérente avec le modèle d'application JMS du Spring JMS Getting Started Guide . J'ai suivi le chemin de l'importation de ce projet dans l'espace de travail Eclipse et j'ai utilisé le processus de construction Gradle , mais le processus basé sur Maven- fonctionne également. Comme exercice, j'ai utilisé la configuration maven à partir de la ligne de commande au lieu de l'IDE Eclipse.
Le même code de l'exemple fonctionne avec MQ avec une modification minimale:

  • Modifiez le fournisseur de messagerie source dans la liste des dépendances pour pointer vers le package IBM MQ.
  • Modifiez le nom de la file d'attente dans Application.java (l'exemple utilise «boîte aux lettres») en «DEV.QUEUE.1» - il s'agit de la file d'attente prédéfinie par la configuration Developer dans le conteneur Docker. Si vous n'utilisez pas les paramètres de configuration Developer par défaut, vous devrez soit définir le nom de la file d'attente sur le même nom que la file d'attente existante, soit définir la nouvelle file d'attente correspondante.

Le fichier build.gradle modifié qui contrôle la compilation a maintenant:

  dependencies { compile("com.ibm.mq:mq-jms-spring-boot-starter:+") compile("com.fasterxml.jackson.core:jackson-databind") } 

Si vous préférez utiliser Maven, la section correspondante dans pom.xml est la suivante:

 <dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.ibm.mq</groupId> <artifactId>mq-jms-spring-boot-starter</artifactId> <version>0.0.3</version> </dependency> </dependencies> 

La seule vraie différence est qu'une version spécifique du module MQ Spring Boot est spécifiée dans la configuration Maven.

Configuration par défaut


Les noms d'attribut de configuration MQ Boot Starter commencent par le préfixe ibm.mq. Attributs par défaut

  ibm.mq.queueManager=QM1 ibm.mq.channel=DEV.ADMIN.SVRCONN ibm.mq.connName=localhost(1414) ibm.mq.user=admin ibm.mq.password=passw0rd 

Ils correspondent aux valeurs par défaut du conteneur Docker.

Options de configuration avancées


Si vous avez déjà un gestionnaire de files d'attente MQ en cours d'exécution que vous souhaitez utiliser, vous pouvez facilement modifier la configuration par défaut en spécifiant des valeurs remplacées. Un gestionnaire de files d'attente peut être un service local ou même un service hébergé sur IBM Cloud . Le fichier application.properties dans un projet Java est un moyen de supprimer ces attributs du projet. La configuration prend effet sans aucune modification de code.

Spécifiez le nom de l'attribut du gestionnaire de files d'attente:

 ibm.mq.queueManager=QM1 

Pour les connexions client au gestionnaire de files d'attente, vous devez également définir

 ibm.mq.channel ibm.mq.connName 

Si ni canal ni connName n'est spécifié, il est supposé que le gestionnaire de files d'attente local est utilisé. Le composant de configuration prend également en charge certains attributs liés à TLS. Ils sont décrits plus en détail dans le fichier README, mais leurs valeurs par défaut sont nulles. Vous devrez peut-être également installer

 ibm.mq.user ibm.mq.password=passw0rd 

pour remplacer les valeurs par défaut. Ces attributs peuvent être laissés vides pour utiliser l'ID utilisateur local du système d'exploitation sans authentification, si le gestionnaire de files d'attente l'autorise.

Exemple de contenu du fichier application.properties :

  ibm.mq.queueManager=QM1 ibm.mq.channel=SYSTEM.DEF.SVRCONN ibm.mq.connName=server.example.com(1414) ibm.mq.user=user1 ibm.mq.password=passw0rd 

Après cela, Spring Boot créera une ConnectionFactory qui pourra être utilisée pour interagir avec le gestionnaire de files d'attente.

Test de l'exemple de programme


Vous pouvez exécuter l'exemple de programme à l'aide de la gradle bootRun . Ou utilisez maven pour exécuter le mvn package puis java -jar ./target/gs-messaging-jms.jar pour exécuter le programme. Vous devriez voir ce qui suit:



Ici, vous pouvez voir comment l'application a mis le message («envoyer un e-mail»), puis l'a récupéré.

Conclusions


L'utilisation de Spring Boot Starter avec MQ vous permet de démarrer très rapidement. Ensuite, après avoir lancé votre première application, vous pouvez l'étendre pour utiliser d'autres fonctionnalités MQ. Après l'avoir essayé, vous pouvez donner votre avis ici ou sur la page des problèmes de GitHub .

Mise à jour - juin 2018


Plus tôt cette année, une mise à jour majeure du Spring Boot Framework, connue sous le nom de Boot 2. Le MQ Boot Starter a été mis à jour pour fonctionner avec cette nouvelle version de la plate-forme. Bien sûr, toutes les versions publiques de ce code sont disponibles dans le référentiel central Maven . Pour la compatibilité avec Spring Boot 1, vous devez continuer à utiliser la version 0.0.4 de cet artefact; la version 2.0.0 est compatible avec Boot 2 et sera utilisée comme base pour toutes les futures mises à jour.

Mots-clés jms , mq , mqseries , spring , spring boot

auteur Mark E Taylor

11 commentaires sur l'article "Développement d'applications MQ JMS sur Spring Boot"


(Seuls les commentaires utiles et les commentaires avec réponses traduits)

3.
Horacio 16 mai 2019
Mark, excellent travail.
Puis-je gérer plusieurs files d'attente?
Je vois que le préfixe est codé en dur dans @ConfigurationProperties (prefix = "bm.mq")

o Mark E Taylor 17 mai 2019
Je ne comprends vraiment pas la question. Un «préfixe» fait référence aux attributs de configuration qui montrent essentiellement comment se connecter au gestionnaire de files d'attente. Cela n'a rien à voir avec les files d'attente que l'application utilise après la connexion. Si vous vouliez vraiment vous poser des questions sur la connexion à plusieurs gestionnaires de files d'attente, consultez github.com/ibm-messaging/mq-jms-spring/issues/7 pour voir quelles approches les gens utilisent.

7.
Peter 17 mai 2018
"Hello.Application" est manquant, les fichiers se trouvent-ils sur github?

o Mark E Taylor 12 juin 2018
Pour extraire et importer un exemple d'application, j'ai utilisé la page de démarrage de Spring (voir spring.io/guides/gs/messaging-jms ), puis j'ai apporté des modifications mineures. Pour diverses raisons, je ne voulais pas intentionnellement avoir une copie séparée de ce code ici.

Traduit par @middle_java .

Source: https://habr.com/ru/post/fr479232/


All Articles