18.11.2. Créer un pontage JMS
Un pontage JMS consomme des messages d'une file d'attente ou une topic JMS source et les envoie à une file d'attente JMS de cible ou sujet, se trouvant en général sur un autre serveur. Il peut être utilisé pour faire un pontage entre les messages entre les serveurs JMS, tant qu'ils sont compatibles avec JMS 1.1. Les ressources JMS de source et de destination sont cherchées à l'aide de JNDI et les classes de client doivent être regroupées dans un module pour la recherche JNDI. Le nom du module est ensuite déclaré dans la configuration de pontage JMS.
Procédure 18.2. Créer un pontage JMS
Configurer le pontage sur le serveur de messagerie JMS source
Configurer le pontage JMS sur le serveur source grâce aux instructions fournies par ce type de serveur. Pour trouver un exemple sur la façon de configurer un pontage JMS sur un serveur JBoss EAP 5.x, voir la rubrique intitulée Create a JMS Bridge dans le Migration Guide de JBoss EAP 6.Configurer un pontage déployé dans de serveur JBoss EAP 6.x de destination
Dans JBoss EAP 6.1 et dans les versions supérieures, le pontage JMS peut servir à combler des messages depuis n'importe quel serveur compatible JMS 1.1. Comme les ressources JMS sources et cibles sont recherchées par JNDI, les classes de recherche JNDI du fournisseur de messagerie source ou fournisseur de messages doivent être regroupées dans un module de JBoss. Les étapes suivantes utilisent le fournisseur de messages fictive « MyCustomMQ » à titre d'exemple.- Créer le module JBoss pour le fournisseur de messagerie.
- Créer une structure de répertoire sous
EAP_HOME/modules/system/layers/base/
pour le nouveau module. Le sous-répertoiremain/
contiendra les JAR du client et le fichiermodule.xml
. L'exemple suivant est un exemple de structure de répertoires créé pour le fournisseur de messageries MyCustomMQ :EAP_HOME/modules/system/layers/base/org/mycustommq/main/
- Dans le sous-répertoire
main/
, créer un fichiermodule.xml
qui contienne la définition de module suivante pour le fournisseur de messagerie. Ce qui suit est un exemple demodule.xml
créé pour le fournisseur de messagerie MyCustomMQ.<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="org.mycustommq"> <properties> <property name="jboss.api" value="private"/> </properties> <resources> <!-- Insert resources required to connect to the source or target --> <resource-root path="mycustommq-1.2.3.jar" /> <resource-root path="mylogapi-0.0.1.jar" /> </resources> <dependencies> <!-- Add the dependencies required by JMS Bridge code --> <module name="javax.api" /> <module name="javax.jms.api" /> <module name="javax.transaction.api"/> <!-- Add a dependency on the org.hornetq module since we send --> <!-- messages tothe HornetQ server embedded in the local EAP instance --> <module name="org.hornetq" /> </dependencies> </module>
- Copier les JAR de fournisseur de messagerie requises pour la recherche JNDI des ressources source vers le sous-répertoire
main/
du module. La structure du répertoire du module MyCustomMQ ne devra pas ressembler à ce qui suit.modules/ `-- system `-- layers `-- base `-- org `-- mycustommq `-- main |-- mycustommq-1.2.3.jar |-- mylogapi-0.0.1.jar |-- module.xml
- Configurer le pontage JMS dans le sous-système de
messaging
du serveur JBoss EAP.- Avant de commencer, arrêtez le serveur et sauvegardez les fichiers de configuration du serveur actuel. Si vous exécutez un serveur autonome, il s'agira du fichier
EAP_HOME /standalone/configuration/standalone-full-ha.xml
. Si vous exécutez un domaine géré, sauvegardez les fichiersEAP_HOME /domain/configuration/host.xml
etEAP_HOME /domain/configuration/domain.xml
. - Ajouter l'élément
jms-bridge
au sous-systèmemessaging
dans le fichier de configuration du serveur. Les élémentssource
ettarget
procurent les noms des ressources JMS utilisées pour les recherches JNDI. Si les informations d'authentificationuser
etpassword
sont spécifiées, elles seront passées comme arguments quand une connexion JMS est créée.Ce qui suit est un exemple d'élémentjms-bridge
configuré pour le fournisseur de messagerie MyCustomMQ :<subsystem xmlns="urn:jboss:domain:messaging:1.3"> ... <jms-bridge name="myBridge" module="org.mycustommq"> <source> <connection-factory name="ConnectionFactory"/> <destination name="sourceQ"/> <user>user1</user> <password>pwd1</password> <context> <property key="java.naming.factory.initial" value="org.mycustommq.jndi.MyCustomMQInitialContextFactory"/> <property key="java.naming.provider.url" value="tcp://127.0.0.1:9292"/> </context> </source> <target> <connection-factory name="java:/ConnectionFactory"/> <destination name="/jms/targetQ"/> </target> <quality-of-service>DUPLICATES_OK</quality-of-service> <failure-retry-interval>500</failure-retry-interval> <max-retries>1</max-retries> <max-batch-size>500</max-batch-size> <max-batch-time>500</max-batch-time> <add-messageID-in-header>true</add-messageID-in-header> </jms-bridge> </subsystem>
Dans l'exemple suivant, les propriétés JNDI sont définies dans l'élémentcontext
pour lasource
. Si l'élémentcontext
est omis, comme dans l'exempletarget
ci-dessus, les ressources JMS seront recherchées dans l'instance locale.