Pour savoir où on va, il faut savoir d'où l'on vient

Vous avez
une question ?
Un projet ?

Contactez nous !
 

Contactez-nous

Vous avez une question ? un projet ? 
Vous souhaitez plus d'informations sur un produit ? sur notre offre ? 
Contactez-nous, on vous répond sous 4H.

retour

Active MQ

Active MQ

Présentation

 

Active MQ s’appuie sur quelques autres projets Apache :

  • Apache Camel : Implémentation partielle des « Entreprise Integration Patterns », que nous avons évoqués plus haut.
  • Jetty : Serveur d'application Java intégré à Active MQ

Et Active MQ est à son tour utilisé par quelques autres grands projets :

  • ESB : Active MQ est utilisé par plusieurs ESBs (Enterprise Service Bus) tels qu’ Apache Service Mix et Mule.
  • Serveur J2EE : Active MQ est intégré au serveur d’application Geronimo (certifié JEE5) comme fournisseur JMS par défaut.
  • Axis et CXF : Extension de Active MQ.

Caractéristiques principales du produit

Langages d'implémentation

Le code source récupéré du SVN, ne semble pas toujours être d’une qualité exemplaire. La mise en forme du code laisse à désirer et certaines parties ne respectent pas les bonnes pratiques de codage Java : peu d'interfaces, classes et méthodes trop longues, ... Mais la robustesse du produit est néanmoins réputée.

Langages pris en charge

La diversité des langages et environnements supportés est particulièrement grande, et c’est un des grands atouts de Active MQ. Comme on l’a évoqué, l’aptitude à faire échanger des applications hétérogènes fait partie des missions naturelles d’un middleware.

Les langages à partir desquelles on peut accéder à Active MQ sont :

  • C : grâce à la bibliothèque OpenWire C Client
  • C++ : grâce à CMS : C'est une bibliothèque C / C++ proposant des interfaces similaires à JMS
  • Ajax, RESTful et SOAP : sous condition d'utilisation des passerelles proposées par Active MQ. (La passerelle est sous forme d'un servlet Java, fonctionnant sur Jetty, ou autre)
  • .Net : grâce à NMS : C'est une bibliothèque .Net proposant des interfaces similaires à JMS
  • Delphi and FreePascal grâce à Habari Active MQ Client
  • Perl, PHP, Pike, Python, Ruby, grâce au protocole STOMP et aux librairies client correspondantes.

On voit que le choix du duo STOMP et OpenWire comme protocole de communication a ouvert la voie à l’implémentation d’APIs dans de nombreux environnements.

De plus, s’agissant de protocoles ouverts et bien spécifiés, il est possible de réaliser un client STOMP vers ActiveMQ depuis de nouveaux environnements s’il en manquait à la liste.

Protocoles pris en charge

Les protocoles prit en charge par Active MQ sont les suivants :

  • AMQP : Ce protocole est pris en charge,e mais comme sa définition est volatile, Active MQ prend en charge uniquement les versions 0.8 / 0.9
  • OpenWire : Protocole de communication messages
  • STOMP : Protocole de communication messages
  • JXTA : C'est un protocole permettant de créer des réseaux au dessus des réseaux. JXTA (pour juxtapose), défini par une série de protocoles légers conçus pour gérer n'importe quelle application peer-to-peer. JXTA est compatible avec l'ensemble des plateformes informatiques. L’implémentation Java est basée sur du XML. Avec Active MQ, il agit en tant que connecteur.

     

    • XMPP : Le protocole de messagerie instantanée utilisé par Jabber. Ainsi, on peut se connecter au MOM grâce à un client de messagerie de type Jabber.
    • En ce qui concerne les protocoles proposés par des passerelles :

      • Grâce aux sous-projets Axis et CXF de Apache, Active MQ gère SOAP, REST, …

      Selon les classes d'interface :

      • Messagerie
      • JCA 1.5 sous Java
      • JMS 1.1 et 1.0.2b sous Java
      • NMS à partir des plateformes .Net
      • CMS à partir des plateformes C/C++
      • Administration, Monitoring, Configuration
      • JMX , XML , Spring , Java DSL et par messages

      Ces points seront revus plus loin.

Gestion des messages

Mis à part la gestion standard des messages imposée par la spécification JMS 1.1, Active MQ gère :

  • Groupe de messages : Ceci est un concept intéressant dans la mesure où il assure que tous les messages d'un même groupe soient reçus par un consommateur déterminé. Les messages d'un groupe X seront consommés uniquement par le consommateur privilégié. Si celui-ci meurt, Active MQ choisit automatiquement un autre consommateur suivant la configuration.
  • Notion de sélecteur de messages compatible avec XPATH (et SQL 92 issue de la spécification JMS)
  • Cependant, il n'y a pas de notion de priorité des messages. Il est possible de la simuler en utilisant des groupes de messages ou bien des sélecteurs.
  • Destination virtuelle : Il est possible de définir des topics et des queues redirigeant vers des composants du même domaine ( topic vers topic et queue vers queue).
  • « Total Ordering » : Active MQ a la possibilité d’assurer que l’ordre de réception des messages correspond bien à l’ordre d’envoi.

     

    • Et bien d’autres, issues des EIP

Traitement des messages

Le traitement des messages d’Active MQ est sans doute son plus célèbre atout, après celui de sa grande connectivité. À l'aide du projet Camel qui est intégré, il a la possibilité de traiter les messages selon les modèles d'intégration d'entreprises (EIP).

Citons un exemple faisant d’Active MQ un EAI à part entière. Les fonctionnalités de routage et de transformation représentent les caractéristiques principales des EAIs.

Un exemple de routage est celui qui va rediriger le message selon son contenu.

routage

Et la configuration Spring associée :

 

Quelques explications s’imposent. Les messages reçus sur la file « demandes » seront transmis aux files :

  • smile : si la propriété entreprise du message est égale « Smile »
  • avant-vente : si la propriété entreprise du message est égale « autres »
  • accueil : si aucune des conditions précédentes n'est respectée.

Il faut néanmoins rappeler que Camel n'implémente pas entièrement EIP.

Gestion des transactions

Bien qu'il n'existe pas de documentation sur la méthode de gestion des transactions en interne, ActiveMQ nous donne quelques pistes.

Par exemple, la journalisation du « Message Store » permet la reprise sur incident sans perte de données lors d'un « rollback » (retour arrière).

Attention, par défaut, le routage et la transformation des messages ne sont pas transactionnels.

Une « Dead Message Queue » est présente. Voici un exemple de configuration :

 

Dans cet exemple, chaque domaine aura une DMQ attribuée de manière individuelle.

Persistance des messages

Active MQ a introduit un mode de persistance appelé « Active MQ Message Store » qui joint un stockage de données sous forme de fichiers avec un système de journalisation et de mise en cache. Il affiche des performances supérieures au système de persistance sur fichier ou base de données seule. Il affiche aussi une meilleure fiabilité, car il a été bâti pour le transactionnel.

Regardons de plus près son fonctionnement.

Lors de l'écriture d'une donnée, le message réside en cache (Memoire volatile). On construit sa référence (identification) qui sera stockée dans le journal des références. Périodiquement, une copie du journal des références caché est réalisée sur le support persistant. Ceci représente le journal des références persistant. De plus, si la donnée n'a pas été consultée depuis longtemps (configurable), elle est déplacée vers média persistant (d'une façon transactionnelle) et ses références sont mises à jour (cache et persistant).

Lors d'une lecture, on accède soit directement à la donnée en cache, soit dans le média de stockage.

Lors d'une transaction, Active MQ ne modifie que les références des messages.

Active MQ recommande d'avoir un nombre de messages inférieur à 1 million par page de cache. Le nombre de page de cache n'est pas limité.

Voici une configuration simple d'un broker utilisant l' « Active MQ Message Store » :

 

Si un objet n’est plus référencé, il est tout simplement supprimé. Être référencé c’est être présent dans un des domaines, et donc ne pas encore avoir été consommé.

Les performances supérieures s'expliquent par le fait qu’Active MQ détecte et mesure la durée d'attente d'un message avant sa consommation. Il optimise le stockage sur un support non volatil. De fait, il ne stocke que les messages dont la durée de latence est grande.

Les supports de stockage sont compatibles avec les pilotes JDBC.

Répartition de charge et haute disponibilité multi-site

Active MQ propose différents modes de déploiement pour une haute disponibilité :

  • Cluster de brokers: permet la gestion des pannes et la répartition de la charge.
  • Réseau de brokers : permet de gérer un réseau distribué de queues et de topics. Les messages seront transférés de brokers en brokers par la fonction « store and forward » jusqu'à ce qu'ils soient consommés. En d’autres termes, un broker recevant des messages ne correspondant à aucun domaine qu'ilhéberge, enregistrera le message et le transmettra au bon broker. L'enregistrement permet la garantie de transmission en cas d'instabilité réseau par exemple.
  • Réplication en maître-esclave : permet d'avoir une redondance, cependant Active MQ supporte uniquement un esclave par maitre.
  • Partage du Message Store : C'est une alternative à la réplication maître-esclave. Dans ce cas, seul le Message Store est partagé en utilisant un système de fichier sécurisé (SAN ou partage réseau) ou une base de données. La charge de traitement est répartie.
  • Domaine partagé : Une application de Camel serait de partager le traitement de domaine sur plusieurs brokers. Pour ce faire, il suffit de mettre en place un domaine virtuel distribuant les messages sur plusieurs domaines.

Active MQ peut être configuré pour connaître l’emplacement des différents brokers, ou bien peut les découvrir dynamiquement tout au long du cycle de vie de la plateforme. La découverte de nouveaux brokers se fait soit grâce au broadcast, soit grâce à ZeroConf. ZeroConf est un protocole utilisant conjointement l'UDP et le Multicast.

Dès lors, la sécurité devient le point faible. Le risque qu'une personne malveillante introduise un broker malveillant pour voler ou introduire des messages est plus grand.

La découverte de machine peut aussi se faire par l'intermédiaire d'un annuaire du type LDAP. Un broker mis en ligne se déclare dans un annuaire. Les autres machines connectées à l’annuaire se rendent compte de l'apparition d'une nouvelle machine et communiquent avec lui.

Un exemple de configuration de la découverte par LDAP:

 

Interopérabilité avec d'autres MOMs

Active MQ fournit une passerelle JMS aisément configurable (DSL, Spring XML). L'authentification est aussi prise en compte par les fichiers de configuration. Ces fichiers de configuration peuvent être intégrés à ceux d’Active MQ.

Gestion de la sécurité et d'un annuaire

L'authentification et la gestion des droits sont intégrées sous forme de plugins dans Active MQ. Les plugins proposés par défaut s'appuient sur JAAS ou sur des fichiers XML.

L'exemple le plus simple est le suivant :

 

L'interconnexion entre brokers peut aussi être sécurisée par mot de passe et / ou chiffrement (SSL).

 

Il est possible d'encapsuler les connexions dans du SSL entre les clients et un broker pour sécuriser les échanges. Le SSL se comporte donc comme un connecteur à part entière.

Il possible de lier la sécurité de la plateforme avec un serveur LDAP.

Active MQ fournit une interface de personnalisation via des « Interceptors ». Il est un ainsi possible d'étendre les possibilités de Active MQ très facilement. L’exemple le plus commun serait la gestion de l'authentification. Les « Interceptors » permettent de modifier certains comportements internes sans changer le cœur d’Active MQ et en compatibilité avec les versions futures.

Administration

Le monitoring et l'administration de la plateforme sont proposés :

  • à travers de l'interface JMX
  • au moyen d’une interface web (web console)
  • par des messages : cette fonctionnalité est aussi disponible à distance via le protocole XMPP (Voir le Glossaire).

Active MQ propose des « Advisory Message » (message d'information) qui permettent de connaître l'état du système. Voici des exemples de métriques :

  • les connexions clients
  • les files d'attentes créées et détruites par les applications
  • les messages expirés

Les « Advisory Messages » sont organisés en queues et topics protégés par mot de passe. On peut y accéder à partir d’un simple client Active MQ (JMS ou autre).

Active MQ implémente aussi des « Mirrored Queues » : les messages envoyés à une file d'attente seront, de manière transparente, envoyés sur un Topic. Même si cette fonctionnalité est à utiliser avec précaution, elle permet à un ou plusieurs clients de suivre l'état d'une file d'attente. C’est l’application du design « Wire Tap » (les écoutes téléphoniques pratiquées par les espions) de EIP.

De plus, Active MQ nous fournit une interface d'administration Web. Cette interface est démarrée par défaut à l'aide de Jetty. Elle démarre par défaut à l’adresse suivante : HTTP://0.0.0.0:8161/admin

IA_ActiveMQ

Configuration et déploiement

Active MQ peut être installé sur n'importe quelle plateforme supportant au minimum Java 5.

Active MQ est configurable en utilisant des fichiers XML intégrables à Spring. Active MQ se configure aussi à l'aide de Java DSL.

Active MQ peut aussi être configuré et lancé à partir d'un autre programme (Java), c'est la notion de « Embedded Broker » : le broker n’est plus un processus indépendant auquel le programme s’adresse par le réseau, il tourne dans le même processus que le programme client.

Active MQ est livré avec un ensemble d'exemples codés en Java ou en Ruby. Tous les cas d'utilisation d’Active MQ ne sont pas couverts par la trentaine d'exemples fournis.

Détail sur le projet

Détail

Active MQ a été principalement développé par la société LogicBlaze, et racheté par IONA technologies en 2007. IONA technologies était célèbre dans les années 90 pour son expertise CORBA.

La dernière version d'Active MQ est la 5.2.0, mais la version 4.1.x est encore maintenue par Active MQ.

Active MQ n’a pas de version commerciale.

Qualité

Active MQ utilise MAVEN pour gérer le projet. Le code source est disponible sur un SVN public dans lequel on retrouve la branche de développement, mais aussi chaque version depuis la 4.0. À noter que le projet est également disponible dans le référentiel MAVEN central.

Le site web du projet propose une documentation détaillée et utile. Certains des exemples que nous citons sont issus du site. On remarque cependant la présence de fautes d'orthographe ainsi que de nombreuses pages « en cour de construction ». Un forum pour les utilisateurs d'Active MQ est disponible sur lequel on recense une centaine de sujets par mois. À cela, s'ajoute un « bug tracker » (JIRA) contenant les différents bugs référencés par version.

Le projet possède 114 contributeurs dont une trentaine y travaille à temps plein.

Le site officiel d’Active MQ est http://activemq.apache.org. Il possède un page Rank de 8, ce qui reflète la forte popularité de l’outil. Google référence à peu près 14 200 pages.

La communauté dispose d’un site officiel, sous forme de Wiki. Elle a aussi une mailing liste, un forum et un salon IRC. Le temps de réponse moyen est de l'ordre de 2 jours. Remarquons que certaines questions ne trouvent pas de réponses.

Signalons aussi le livre « Active MQ in Action », aux éditions MEAP. Ce livre, disponible uniquement en version anglaise, est une bonne lecture pour appréhender et utiliser Active MQ. Son existence même témoigne de l’intérêt suscité par le produit.

Références

Active MQ est utilisé par de nombreux projets faisant partie de la fondation Apache (Geronimo, Service Mix, Jet Speed, Apache Directory), mais également par des projets extérieurs à cette fondation (Eclipse, Active Cluster, Mule, Open IM).

Aucune autre référence client n'est indiquée sur le site.