Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

18.11.2. Créer un pontage JMS

Résumé

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

Cette procédure montre comment configurer un pontage JMS pour faire migrer des messages d'un serveur JBoss EAP 5.x vers un serveur JBoss EAP 6.
  1. 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.
  2. 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.
    1. Créer le module JBoss pour le fournisseur de messagerie.
      1. Créer une structure de répertoire sous EAP_HOME/modules/system/layers/base/ pour le nouveau module. Le sous-répertoire main/ contiendra les JAR du client et le fichier module.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/
      2. Dans le sous-répertoire main/, créer un fichier module.xml qui contienne la définition de module suivante pour le fournisseur de messagerie. Ce qui suit est un exemple de module.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>
        
      3. 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
        
    2. Configurer le pontage JMS dans le sous-système de messaging du serveur JBoss EAP.
      1. 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 fichiers EAP_HOME /domain/configuration/host.xml et EAP_HOME /domain/configuration/domain.xml.
      2. Ajouter l'élément jms-bridge au sous-système messaging dans le fichier de configuration du serveur. Les éléments source et target procurent les noms des ressources JMS utilisées pour les recherches JNDI. Si les informations d'authentification user et password 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ément jms-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ément context pour la source. Si l'élément context est omis, comme dans l'exemple target ci-dessus, les ressources JMS seront recherchées dans l'instance locale.